[英]JPA Specification DDD - Advanced topic
最近,我開發了一個項目,其中我將DDD規范與JPA謂詞一起使用:
public interface Specification<T>{
public boolean isSatisfiedBy(T object);
Predicate toPredicate(Root<T> root, CriteriaQuery<T> cq, CriteriaBuilder cb);
ISpecyfikacja<T> and(ISpecyfikacja<T> specyfikacja);
ISpecyfikacja<T> or(ISpecyfikacja<T> specyfikacja);
ISpecyfikacja<T> not();
}
我有3個具有以下關系的實體“ A”,“ B”和“ C”:
與B的一對多
C與B一對多
然后,我為實體“ A”創建了一些規范,但條件與實體“ C”相關聯,因此我進行了聯接。
root.join(A.b1).join(B.c1);
如果有一個這樣的規范,一切都可以,但是如果有兩個這樣的規范就沒有。
當我做spec1.and(spec2).and(spec3).and(...)
我得到:
ORM創建查詢:
select a
from
A a,
B b1,
C c1,
B b2,
C c2,
...
where ...
如果您有更多這樣的規范and
相互聯系,那么此選擇將成為噩夢聯接,因為應該只使用一個聯接,並對它應用謂詞。
我的問題是:如何省略這些聯接?
更新:問題是如何設計規范以使查詢中的所有規范具有單個Join元素。 我知道我需要重用變量,我需要在整個規范中散布Join對象。 按參數,按構造函數...聽起來不太好
聽起來您多次調用join(A.b1)
,這將導致多個聯接。 要進行一次聯接,只需調用一次並重用變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.