2016-07-19 3 views
2

entitymanagerを使用しているエンティティが、関連する外部キーを使用して見つかることがありますか?例えばforeignman鍵を使用するentitymanager.find()

私はこのようなクラスを持っている:

メンバーはこのようなものです
@Entity 
    @Table(name = "shopping_bag") 
    public class ShoppingBag { 

     @Id 
     @GeneratedValue(generator="system-uuid") 
     @GenericGenerator(name="system-uuid", strategy = "uuid") 
     private String id; 

     @OneToOne 
     private Member member; 

     @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) 
     private Set<Product> product = new HashSet<Product>(); 
} 

:私は何をしようとしている

@Entity 
@Table(name = "shopping_member") 
public class Member { 

    @Id 
    @GeneratedValue(generator="system-uuid") 
    @GenericGenerator(name="system-uuid", strategy = "uuid") 
    private String id; 

} 

は、すべての製品が使用して、会員IDを知って取得することですentityManager!

解決策は、ネイティブSQL(またはHSQL)を使用することですが、もっと単純なソリューションがあるかどうかを知りたいのですが...任意のアイデア?

答えて

2

あなたはそれが(そのjavadocは十分にあなたが明確に伝えて)idを持つ型のオブジェクトを見つけたので、あなたは明確にfind()を使用することはできませんHibernate Criteria

List results = entityManager.createCriteria(ShoppingBag.class, "ShoppingBag") 
    .createAlias("ShoppingBag.member", "member", Criteria.LEFT_JOIN); 
    .add(Restrictions.eq("member.id", someStringValue)) 
    .list(); 

Rererence #1
Reference #2

+1

JPAベンダーの移植性を失う... –

1

を使用することができます。 JPQLクエリを実行して、必要なものを取得できます。

SELECT p FROM ShoppingBag b JOIN b.product p JOIN b.member m WHERE m.id = :memberId 
関連する問題