2013-01-21 80 views
1

我對Hibernate,我想知道這種事情怎麼準則:多參加水平休眠標準

我有三個類A,B和C A類有關聯@ OneToMany與類B和B類有關聯@ManyToOne與類C.

我想有一個請求作出的標準,檢索所有的信息,當我想從類A的對象,以便我可以迭代A.Bs然後訪問bc

此刻我有一個查詢只檢索B:

session.createCriteria(A.class) 
.add(Restrictions.idEq(aId)) 
.setFetchMode("B", FetchMode.JOIN) 
.uniqueResult(); 

謝謝您的幫助

編輯: 我試過了:

session.createCriteria(A.class) 
.add(Restrictions.idEq(aId)) 
.createCriteria("Bs") 
.createCriteria("C") 
.uniqueResult(); 

但有一個與該錯誤結束:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 

回答

1

找到了解決辦法:

session.createCriteria(A.class) 
.add(Restrictions.idEq(aId)) 
.setFetchMode("Bs", FetchMode.JOIN) 
.setFetchMode("Bs.c", FetchMode.JOIN) 
.uniqueResult(); 

其中'Bs'是包含@OneToMany關聯的A的屬性,'c'是B包含@ManyToOne關聯的屬性。