(懒惰)使用Hibernate Criteria API进行LEFT OUTER JOIN

时间:2010-02-05 11:20:12

标签: hibernate criteria outer-join

我想使用Criteria API在两个表之间执行LEFT OUTER JOIN。我在Hibernate文档中找到的就是这个方法:

Criteria criteria = this.crudService
            .initializeCriteria(Applicant.class)
            .setFetchMode("products", FetchMode.JOIN)
            .createAlias("products", "product");

但是,这会执行内连接或右外连接,因为它返回的结果数量。

我也希望我的加入是懒惰的。我怎么能这样做?

干杯!

UPDATE:似乎使用别名会自动加入INNER JOIN。 “背景故事”中还有一些我还没有掌握的东西。所以,今天没有别名。这给我留下了对两个表应用限制的问题,因为它们都有一个列(或属性,如果这更合适)' name '。

3 个答案:

答案 0 :(得分:36)

如果您需要在产品表上保持联接,请执行以下操作:

  

..... createAlias( “产品”,   “product”,Criteria.LEFT_JOIN);

答案 1 :(得分:23)

Sdavids答案的API现在是deprecated。它的更新版本是

  

.... createAlias("员工"," emp",JoinType.LEFT_OUTER_JOIN)

答案 2 :(得分:0)

连接在SQL请求中。它不能是懒惰的。


使用Hibernate,懒惰地检索这些数据,只需将其从HQL请求中排除即可。然后,当您访问实体上的getter时(如果Session仍处于打开状态),它将自动加载(您不必编写请求的那部分)。