0

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でも正常に機能します。= /

助けてくれてありがとう。

4

1 に答える 1

0

生成されたSQLは何ですか?

試してみてください

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

最新リリースもお試しください。

于 2012-08-01T13:30:48.927 に答える