EclipsLinkを使用していますが、この問題が発生しました。
以下のJPQLは、正しい結果を1つだけ示します。
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))));
間違った結果が表示されます:車名:ブラックホース、車名:ホワイトサンダー、車名:ハービー、車名:イエローサブマリン
データベースからすべてのデータを取得します。私は何かが足りないのですか?
上記と同じ基準がHibernateでも正常に機能します。= /
助けてくれてありがとう。