如何使用JPA条件api加入两个不相关的实体?

时间:2017-01-24 20:24:59

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

相关问题