2017-10-24 9 views
0

私は以下のエンティティを持っています:ShoppingCart、抽象クラスユーザを拡張するユーザとエンドユーザ。 AddressDetailsは、EndUserエンティティに埋め込まれた埋め込み可能です。結合サブクラスの埋め込み可能なプロパティを照会するHibernate/JPA

私のクエリは次のようになります。SELECT sc FROM ShoppingCart sc JOIN sc.endUser as endUser WHERE endUser.name EQ someName and endUser.addressDetails.zip EQ 1234

私はWHERE句の第二の部分を削除し、ちょうどendUser.nameの一部を残す場合は、すべてが正常に動作します(名前はエンドユーザーのエンティティクラスのプロパティですUserエンティティクラスのサブクラス)。私は、全体のクエリをしようとすると、 はしかし、私が取得:

org.hibernate.QueryException: could not resolve property: zip of: 

のShoppingCart:

@Entity 
public class ShoppingCart { 

    ... 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinTable 
    private EndUser endUser; 
} 

ユーザー:

@Entity 
public abstract class User { 
... 
} 

ENDUSER:

@Entity 
public class EndUser extends User { 
    ... 
    @Column 
    private String name; 

    @Embeded 
    private AddressDetails addressDetails; 
    ... 
} 

アドレスの詳細:

@Embeddable 
public class AddressDetails { 
    ... 
    private int zip; 
    ... 
} 
+2

なしタイプミス? – xerx593

+0

私はチェックし、どこにもタイプミスはなかった。私は実際にその解決策を見つけました。私の答えを確認してください – user3362334

+0

'@埋め込み 'はtypoです – Birchlabs

答えて

1

実際にこの問題が見つかりました。

ShoppingCartとendUserの間の@ManyToOneリレーショナルセットでFetchTypeをEAGERに変更すると、クエリが機能します。

だから、あってはならない:ゲッター/セッター/クエリで

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinTable 
    private EndUser endUser; 
関連する問題