public class Student
{
private School school;//many to one...
//setter and getters ommited
}
public class School
{
private Set<Student>students;//Students...
private Set<Owner>owners;//Owners one to many....
}
我有我的代碼是很容易的一個實體..
final Criteria criteria = session.createCriteria(Student.class)
.add(filters)
.setFetchMode("school",FetchMode.JOIN);
final List<Student>students = criteria.list();
但我想取回業主以及後來我可以做
for(final Student student:students)student.getSchool().getOwners.size();
但是這樣會產生另一個distinct
SQL查詢。
但我想在單個查詢中這樣做可能嗎?
我試試。
final Criteria criteria = session.createCriteria(Student.class)
.add(filters);
final Criteria ownerCriteria = criteria
.createCriteria("school","school")
.createAlias("owners","owners");
final List<Student>students = criteria.list();
但是,這並不工作,因爲當我通過它
導航for(final Student student:students)student.getSchool().getOwners.size();
Exception in thread "main" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
拋出異常!甚至我可以看到在Hibernate SQL console..
的inner join
但似乎Owner
集合不填充....
任何解決方法或我問得多
任何幫助是巨大的讚賞來自委內瑞拉的問候..
您可以使用一個fetch連接,但在這種情況下,你想獲取一個延遲初始化集合('java.util.Set')這又需要昂貴的收藏獲取在其中是als o可能會從Hibernate獲得警告。在這種情況下,最好是執行一個單獨的查詢來取回集合。 (你可以爲所有者的關係指定'fetch = FetchType.EAGER',但是這是(非常)不鼓勵的,我個人非常不喜歡它,這只是一種解決方法,而不是實際的解決方案)。 – Tiny 2015-02-17 23:48:22
在School-> getOwner中使用fetch = FetchType.EAGER,但它爲什麼不能使用標準方法工作? – chiperortiz 2015-02-17 23:56:23