我想使用Criteria API在两个表之间执行LEFT OUTER JOIN。我在Hibernate文档中找到的就是这个方法:
Criteria criteria = this.crudService
.initializeCriteria(Applicant.class)
.setFetchMode("products", FetchMode.JOIN)
.createAlias("products", "product");
但是,这会执行内连接或右外连接,因为它返回的结果数量。
我也希望我的加入是懒惰的。我怎么能这样做?
干杯!
UPDATE:似乎使用别名会自动加入INNER JOIN。 “背景故事”中还有一些我还没有掌握的东西。所以,今天没有别名。这给我留下了对两个表应用限制的问题,因为它们都有一个列(或属性,如果这更合适)' name '。
答案 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仍处于打开状态),它将自动加载(您不必编写请求的那部分)。