Hibernate Criteria和多个join

有可能用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; 

我有完全相同的问题,并能够像这样解决它:

 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"地指代ABC类中的属性名称(类A具有属性b ,依此类推)。

对于此解决方案,您甚至不需要在A.hbm.xml设置lazyfetch参数。

Hibernate Reference材料中有一些很好的例子,它们使用setFetchMode来获取与外连接的关联。

一个例子是:

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

那里也有关于不同的取物绳索的信息可能对你有用。

尝试在您的条件中设置获取模式,例如:

 criteria.setFetchMode(..., FetchMode.EAGER) 

这会创建一个连接查询。 您可以在此处找到更多详细信息

是的,实际上有几种方法可以做到这一点:

  1. 映射关联时,将其lazyness设置为false,并将其获取模式设置为join。 这将影响所有条件查询。
  2. 使用setFetchMode,如其他答案所详述。
  3. 使用criteria.createAlias(或createCriteria)。 这也允许您进一步限制要连接的行。