使用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")))
但这不允许我指定它是左连接。
答案 0 :(得分:2)
使用Criteria查询执行的操作不允许您将其指定为左连接,因为它实际上不是左连接。您在查询中只有多个根,并且根据使用笛卡尔积的Hibernate documentation,但如果没有匹配,则使用左连接时,右侧会显示空值。
由于Form interface只允许您从实体的属性创建联接,我认为您想要实现的目标不适用于Criteria API。您要么必须对数据库执行两次查询,要么必须使用JPQL或SQL在一个查询中执行此操作。