0

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

JPQL bellow 只给我带来一个结果,那就是正确的结果:

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

结果是:车名:Yellow Submarine

_

但是当我创建以下标准时:

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))));

给出错误结果:车名:Black Horse,车名:White Thunder,车名:Herbie,车名:Yellow Submarine

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

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

谢谢您的帮助。

4

1 回答 1

0

生成的 SQL 是什么?

试一试,

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

也尝试最新版本。

于 2012-08-01T13:30:48.927 回答