3

私のクラス:

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( "accountType"、 "at")もできません。

何かご意見は?

4

1 に答える 1

2

ご存知かもしれませんが、UserTypeはエンティティではありません。UserTypeのプロパティにアクセスできない理由を確認する最良の方法はURL、例として使用することです。URL.hostを要求するクエリは実行しませんが、URL自体を要求します。そのため、たとえば、UserTypeは、文字列をオブジェクトに変換し、オブジェクトを文字列に変換する方法を知っている必要があります。したがって、次のようなものを使用する必要があります。

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

このUserTypeの例と、テストスイートからのテストケースを見てください。

しかし、本当の問題は、なぜこのUserTypeの代わりにEnum(および@Enumerated)を使用していないのかということだと思います。内部的にはUserTypeであるため、列挙型の方が適していると思いますが、Hibernateには「ネイティブ」です。

于 2011-01-08T11:15:16.243 に答える