java-ee – 如何使用JPA条件api连接两个不相关的实体?

使用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")))

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

最佳答案 使用Criteria查询执行的操作不允许您将其指定为左连接,因为它实际上不是左连接.您在查询中只有多个根,并且根据使用笛卡尔积的
Hibernate documentation,但是如果没有匹配,则使用左连接时,右侧会出现空值.

由于Form interface只允许您从实体的属性创建连接,我认为您想要实现的目标不适用于Criteria API.您要么必须对数据库执行两次查询,要么必须使用JPQL或SQL在一个查询中执行此操作.

点赞