Hibernateは、投影基準のUSERTYPESのフィールドへのアクセスをサポートしていませんか?

StackOverflow https://stackoverflow.com/questions/4630445

質問

私のクラス:

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)を使用していない理由だと思います。列挙は内部的には使用型であるため、より良いフィットだと思いますが、冬眠するには「ネイティブ」だと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top