可以用Hibernate标准吗?
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;
答案 0 :(得分:17)
我有完全相同的问题,并且能够像这样解决它:
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"
会引用A
,B
和C
类中的属性名称,相应地(类A
具有属性b
,依此类推。)
对于此解决方案,您甚至不需要在lazy
中设置fetch
和A.hbm.xml
参数。
答案 1 :(得分:2)
Hibernate Reference material中有一些很好的示例,它们使用setFetchMode来获取与外部联接的关联。
一个例子是:
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
还有information there about different fetching stragies可能对您有用。
答案 2 :(得分:1)
答案 3 :(得分:0)
是的,实际上有几种方法可以做到这一点: