休眠条件和多重联接

2022-09-04 19:30:31

有没有可能用休眠标准来做吗?

select A.something, B.something, C.something, D.something
    from  A JOIN B on A.id = B.id_fk
          JOIN C ON B.id = C.id_fk
          JOIN D ON C.id = D.id_fk;

答案 1

我遇到了完全相同的问题,并且能够像这样解决它:

return criteria.createCriteria(A.class)
               .createCriteria("b", "join_between_a_b")
               .createCriteria("c", "join_between_b_c")
               .createCriteria("d", "join_between_c_d")
               .add(Restrictions.eq("some_field_of_D", someValue));

注意:,在上面的代码中引用的属性名称,和类,相应地(类具有属性等)。"b""c""d"ABCAb

对于此解决方案,您甚至不需要在 .lazyfetchA.hbm.xml


答案 2

在 Hibernate 参考资料中有一些很好的例子,它们显示了如何使用 setFetchMode 获取与外连接的关联。

例如:

List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();

那里还有关于可能对您有用的不同取件标记的信息


推荐