具有休眠标准的多个连接级别

时间:2013-01-21 19:02:42

标签: hibernate join criteria fetch

我是Hibernate的新手,我想知道Criteria的这类事情:

我有三个班级A,B和C. A类与B类有@OneToMany关联.B类与C类有@ManyToOne关联。

我想要一个使用Criteria的请求,当我需要A类中的对象时,可以检索所有信息,以便我可以遍历A.Bs然后访问b.c

目前我的查询只检索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 个答案:

答案 0 :(得分: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关联。