2016-10-12 25 views
0

C.dがパラメータと一致する必要があるCのリストを含むBのエンティティAを選択しようとしています。孫属性に基づいてエンティティを選択するJPQL

私のエンティティは次のようになります。クエリを構造化する必要がありますどのように

SELECT entity FROM A entity WHERE entity.b1.cs.d = :d

:私のエンティティを選択する上

@Entity 
class A { 

    @GeneratedValue 
    @Id 
    private Long id; 

    @Column(name="B") 
    @OneToOne(cascade=CascadeType.ALL) 
    @MapsId 
    private B b1; 
} 

@Entity 
class B { 

    @GeneratedValue 
    @Id 
    private Long id; 

    @OneToMany(mappedBy="b2", cascade=CascadeType.ALL) 
    private List<C> cs; 
} 

@Entity 
class C { 

    @GeneratedValue 
    @Id 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name="B") 
    private B b2; 

    private String d; 
} 

私の素朴なアプローチは、次のようになり?

答えて

0

あなたは、これがどのように機能するかをより詳細に説明してもらえこの

TypedQuery<A> query = em.createQuery("select b.a from B b inner join C c where c.d = :d",A.class); 
List<A> a = query.getResultList(); 
+0

を試してみてください?それはAよりむしろリストを返すようですか? – span

+0

はいこれは、タイプAのオブジェクトのリストを返します。結果が1つのオブジェクトだけであることが確かであれば、getResultList()ではなくgetSingleResult()を使用できます。 –

関連する問題