Hibernate unterstützt keine Felder auf usertypes für die Projektion Kriterien zugreifen?
-
08-10-2019 - |
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?
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.