Frage

Meine Klassen:

public class User 
{
   @Type(type="AccountType")
   private AccountType accountType;
}

public class AccountType 
{
   private String name;

   private AccountType(String name)
   {
      this.name = name;
   }

   public static AccountType User = new AccountType("User");
   public static AccountType Administrator = new AccountType("Administrator");
}

Ich habe auch eine richtig Setup AccountTypeUserType.

Meine Frage:

List results = session.createCriteria(User.class)
   .setProjection(Projections.projectionList()
      .add(Projections.property("accountType.name"), "accountType)
   )
   .setResultTransformer(Transformer.aliasToBean(UserSummary.class))
   .list()

Das Problem, das ich in laufen, ist, dass meine Frage nicht mit ...

org.hibernate.QueryException: could not resolve property: accountType.name of: com.huskyenergy.routecommander.domain.rtc.User

Oh, und man kann nicht .createAlias ??( "account", "at") entweder weil account ist kein Verein.

Alle Gedanken?

War es hilfreich?

Lösung

Wie Sie wahrscheinlich realisiert, ist ein Usertype keine Einheit. Der beste Weg, um zu sehen, warum Sie nicht eine Eigenschaft in einem Usertype zugreifen können, ist URL wie das Beispiel zu verwenden. Sie werden nicht eine Abfrage für URL.host fragen, aber für URL selbst. Deshalb ein Usertype soll wissen, wie man einen String in ein Objekt zu verwandeln, und ein Objekt in String, zum Beispiel. Also, Sie haben etwas zu verwenden:

.add(Projections.property("accountType.name"), AccountType.User)

Blick auf dieses Beispiel Usertype und der Testfall für sie von der Testsuite .

Aber ich glaube, die eigentliche Frage ist, warum Sie nicht eine Enum verwenden (und @Enumerated) anstelle dieser Usertype. Ich denke, dass ein Enum ist eine bessere Passform, wie es intern ein Usertype, aber es ist „native“ zu Hibernate.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top