2011-01-07 3 views
3

私のクラス:Hibernateは、投影基準のユーザタイプのフィールドへのアクセスをサポートしていませんか?

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 

ああ、あなたができない.createAlias( "accountType"、 "時") accountTypeが関連付けでないためです。

どのような考えですか?

答えて

2

おそらく実現したように、UserTypeはエンティティではありません。 UserTypeのプロパティにアクセスできない理由を調べる最良の方法は、URLを例として使用することです。 URL.hostを要求するクエリは実行しませんが、URL自体は要求しません。そのため、UserTypeはStringをObjectに、ObjectをStringに変換する方法を知っている必要があります。テストスイートからthis UserType examplethe test case for it

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

ルック:だから、あなたは、このようなものを使用する必要があります。

しかし、このUserTypeではなくEnum(および@Enumerated)を使用していないのが本当の問題だと思います。 Enumは内部的にはUserTypeだが、Enumはより良いフィット感だと思うが、Hibernateの "ネイティブ"だ。

+0

私はちょっとした振る舞いでスマートな列挙型が欲しいです。私がAccountTypeのものにアクセスすることができればいいと思う。* sigh * –

関連する問題