2012-07-10 47 views
1

如何表達與JPA 2.0標準的查詢應該獲取所有實體一個不在的關係:與實體B.如何表達不與M:N關係的JPA 2.0標準?

域模型(M n)爲:

@Entity class A{ 
    @Id int id; 
    @ManyToMany List<B> disableForB; 
} 

@Entity class B{ 
    @Id int id; 
} 

相關問題此域模型是:如何找到與disableForB不相關的所有A對於特定的B

+0

看到http://stackoverflow.com/questions/1578644/jpa-ql-how-to-not-select-something – 2012-07-10 14:59:48

+0

@大衛霍爾布魯克:http://stackoverflow.com/questions/1578644/jpa -ql-how-to-select-something用於JPQL而不是Criteria API的討論 – Ralph 2012-07-10 16:44:21

回答

1

我沒有環境來測試當前可用的查詢,所以下面可能包含一些錯誤。這是無論如何可用isNotMember

B b ... 
CriteriaQuery<Aa> cq = cb.createQuery(A.class); 
ParameterExpression<B> param = cb.parameter(B.class); 
Root<A> a = cq.from(A.class); 
Expression<Collection<B>> disabledB = a.get("disableForB"); 
Predicate pred = cb.isNotMember(param, disabledB); 
cq.select(a); 
cq.where(pred); 
em.createQuery(cq).setParameter(param, b).getResultList();