23

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

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

但是,这要么执行内部联接,要么执行右外部联接,因为它返回的结果数量。

我也希望我的加入是懒惰的。我怎样才能做到这一点?

干杯!

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

4

3 回答 3

38

如果您需要在产品表上离开联接,只需执行以下操作:

.....createAlias("products", "product", Criteria.LEFT_JOIN);

于 2010-02-06T04:49:08.880 回答
26

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

....createAlias("employee", "emp", JoinType.LEFT_OUTER_JOIN)

于 2015-02-28T08:21:02.863 回答
0

SQL 请求中有一个联接。不能偷懒。


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

于 2010-02-05T11:22:27.627 回答