我正在使用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。 = /
感谢您的帮助。
答案 0 :(得分:0)
生成的SQL是什么?
尝试一下,
criteriaQuery.where(criteriaBuilder.isEmpty(join.<Collection>get("dogs"));
也可以试试最新版本。