簡體   English   中英

JPA規范DDD-高級主題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM