带有条件的Eclipselink - (带有错误结果的子查询的isEmpty)

时间:2012-07-31 15:58:01

标签: jpa orm eclipselink

我正在使用EclipsLink,我遇到了这个问题。

JPQL下面只给我一个结果,这是正确的结果:

select distinct c from Car c join c.person p where p.dogs is empty

结果是: 车名:黄色潜水艇

_

但是当我创建标准时,

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery<Car> criteriaQuery = criteriaBuilder.createQuery(Car.class); Root<Car> mainRoot = criteriaQuery.from(Car.class); criteriaQuery.select(mainRoot); criteriaQuery.distinct(true); Join<Person, Car> join = mainRoot.join("person", JoinType.INNER); // Is this right? criteriaQuery.where(criteriaBuilder.and(criteriaBuilder.isEmpty(join.get("dogs").as(List.class))));

错误的结果是:车名:黑马,车名:白雷,车名:赫比,车名:黄色潜水艇

它带来了数据库中的所有数据。我错过了什么吗?

上述相同的标准适用于Hibernate。 = /

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

生成的SQL是什么?

尝试一下,

criteriaQuery.where(criteriaBuilder.isEmpty(join.<Collection>get("dogs"));

也可以试试最新版本。