【问题标题】:how to left join two unrelated entities with JPA criteria api?如何使用 JPA 标准 api 加入两个不相关的实体?
【发布时间】:2017-06-09 20:26:18
【问题描述】:

使用 JPA 2.1 和 hibernate 5.1.x,这可以通过 JPQL 实现

select s.lowerBound,
l.status
...
from Serie s
left join Line l on
s.lowerBound between l.lineStart and l.lineEnd

如何使用 Criteria api 编写此内容? 我试过这个

Root<Serie> serieRoot = query.from(Serie.class);
Root<Line> lineRoot query.from(Line.class);
query.where(criteriaBuilder.between(s.get("lowerBound"), l.get("lineStart"), s.get("lineEnd")))

但这不允许我指定它是左连接。

【问题讨论】:

    标签: jakarta-ee criteria-api jpa-2.1 hibernate-5.x


    【解决方案1】:

    您对 Criteria 查询所做的操作不允许您将其指定为左连接,因为它并不是真正的左连接。您的查询中只有多个根,并且根据使用笛卡尔积的Hibernate documentation,但是如果没有匹配项,则使用左连接会在右侧得到空值。

    由于Form interface 只允许您从实体的属性创建连接,我认为您想要实现的目标是使用 Criteria API 无法实现的。您要么必须对数据库进行两次查询,要么必须使用 JPQL 或 SQL 在一次查询中完成。

    【讨论】:

    • 很遗憾不能使用标准 API 完成。每种方法,无论是 JPQL 还是标准 API,都缺少另一种方法具有的一些功能。令人沮丧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多