Hibernateは、投影基準のUSERTYPESのフィールドへのアクセスをサポートしていませんか?
-
08-10-2019 - |
質問
私のクラス:
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");
}
また、適切にセットアップAccountTypeUserTypeもあります。
私の質問:
List results = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("accountType.name"), "accountType)
)
.setResultTransformer(Transformer.aliasToBean(UserSummary.class))
.list()
私が遭遇する問題は、私のクエリが失敗することです...
org.hibernate.QueryException: could not resolve property: accountType.name of: com.huskyenergy.routecommander.domain.rtc.User
ああ、AccountTypeが関連性ではないため、.createalias( "counttype"、 "at")もできません。
何かご意見は?
解決
おそらく気付いたように、UserTypeはエンティティではありません。 UserTypeでプロパティにアクセスできない理由を確認する最良の方法は、使用することです URL
例として。 url.hostを要求するクエリは行いませんが、URL自体を要求します。そのため、UserTypeは、文字列をオブジェクトに変換し、オブジェクトを文字列に変換する方法を知っている必要があります。したがって、このようなものを使用する必要があります。
.add(Projections.property("accountType.name"), AccountType.User)
見る このusertypeの例 と それのテストケース テストスイートから。
しかし、本当の問題は、このusertypeの代わりに、列挙(および @enumerated)を使用していない理由だと思います。列挙は内部的には使用型であるため、より良いフィットだと思いますが、冬眠するには「ネイティブ」だと思います。
所属していません StackOverflow