0
多列,我想設計一個查詢像這樣:JPA標準查詢與子查詢
SELECT *
FROM TableA
WHERE (a AND b AND C) NOT IN
(SELECT *
FROM TableB
WHERE TableB.id != 1234)
我真正想要做的是得到表A中的所有記錄,除非出現了一列的值, b和c都在表B中,並且ID恰好是1234.
catch(或者我認爲)是我需要以某種方式構造此查詢,以便根據上述查詢進行過濾,但那麼它還需要匹配其他謂詞列表,使其看起來像這樣:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<TableA> q = cb.createQuery(TableA.class);
Root<TableA> c = q.from(TableA.class);
Subquery<TableB> sq = q.subquery(TableB.class);
Root<TableB> ac = sq.from(TableB.class);
List<Predicate> predicates = new ArrayList<Predicate>();
sq.select(ac);
sq.where(cb.equal(ac.get("id"), 1234));
predicates.add(cb.not(cb.in(c.get("a")).value(sq)));
predicates.add(cb.not(cb.in(c.get("b")).value(sq)));
predicates.add(cb.not(cb.in(c.get("c")).value(sq)));
....
more predicates added
....
q.where(predicates.toArray(new Predicate[]{}));
以上是我的方法之一,但沒有得到正確的結果。