(惰性)使用Hibernate标准API的左外部联接

(惰性)使用Hibernate标准API的左外部联接,hibernate,criteria,outer-join,Hibernate,Criteria,Outer Join,我想使用CriteriaAPI在两个表之间执行左外部联接。我在Hibernate文档中只能找到以下方法: Criteria criteria = this.crudService .initializeCriteria(Applicant.class) .setFetchMode("products", FetchMode.JOIN) .createAlias("products", "product"); 但是,由于返回

我想使用CriteriaAPI在两个表之间执行左外部联接。我在Hibernate文档中只能找到以下方法:

Criteria criteria = this.crudService
            .initializeCriteria(Applicant.class)
            .setFetchMode("products", FetchMode.JOIN)
            .createAlias("products", "product");
但是,由于返回的结果数量,它要么执行内部联接,要么执行右外部联接

我也希望我的加入是懒惰的。我该怎么做

干杯


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

SQL请求中有一个连接。这不可能是懒惰



使用Hibernate,要延迟检索此数据,只需将其从HQL请求中排除。然后,当您访问实体上的getter时(如果会话仍处于打开状态),它将自动加载(您不必写入请求的该部分)。

如果您需要在products表上保留join,只需执行以下操作:

..…createAlias(“产品”, “产品”,标准。左/右连接)


Sdavids answer的API现在已弃用。其更新版本为

..createAlias(“员工”、“emp”、JoinType.LEFT\u OUTER\u JOIN)


对不起,我没听清楚。也许我应该换一种说法:我希望有一个左外部联接,但我也希望只有在需要时才实际检索数据(调用适当的getter)。懒惰(或渴望)与发生的SQL连接类型有某种联系吗?懒惰可以通过对象实现,但不能通过SQL请求实现。一个请求被完全执行一次,它的设计不是为了在需要时稍后执行部分请求!在HQL中,我编写了左外部连接获取。那么,假设一个HQL查询对应于许多SQL查询,它们在需要时执行?不管怎样,不管是不是懒,我怎么做左外连接呢?而不是在HQL中,使用标准API。干杯@对于连接,HQL查询只转换为一个等效的SQL查询。对于标准部分,我不是专家…:-)已经接受答案了。我想知道您对“Hibernate中的createAlia()默认创建内部联接”的引用。我已经搜索了API,但看不到它。谢谢,谢谢。这有助于我消除不推荐的APIDeprecated的用法。现在,使用Ankit的答案