2016-08-23 72 views
1

我希望檢索有「內部」對象C.HQL一個在單條語句的選擇單個對象

我有一個類A類的這樣的對象:

public class A { 
... 
@OneToMany(mappedBy = "classA") 
private List<B> listOfB; 

} 

B類:

public class B { 

... 
@ManyToOne 
@JoinColumn(name = "A_FK") 
private A AObject; 

@OneToMany(mappedBy = "classB") 
private List<C> ListOfC; 

} 

和類C:

public class C { 
... 

private String CId; 

@ManyToOne 
@JoinColumn(name = "B_FK") 
private B BObject; 


} 

說明:我有對象A有對象列表B(一個B對象可以只在一個對象A中),每個對象B都有少量對象C(對象C只能在一個B中)。

如何檢索對象A使用單個HQL查詢,知道對象C的Id?

回答

0

試試這個的HQL查詢:

select a from A as a 
    join a.listOfB as b 
    join b.listOfC as c 
    where c.CId = '1234' 

完整的Java例如:

Query query = this.session.createQuery("select a from A as a join a.listOfB as b join b.listOfC as c where c.CId = :id"); 
query.setString("id", "1234"); 
A a = (A)query.uniqueResult(); 
0

原來,我沒有使用任何聯接罪Hibernate會通過它的自我聯接表。此示例的工作查詢:

select Bclass.AObject 
from B as Bclass 
where Bclass.id = (select Cclass.Bclass.id FROM C Cclass WHERE c.Id=:Id)