1
最近我發展中,我使用DDD規範與JPA謂語項目:JPA規範DDD - 高級話題
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」與這些關係:
甲一對多與乙
ç一對多與乙
然後創建用於實體「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
ED相互的,這個選擇成爲噩夢連接,因爲應該只能使用一個連接,並對其應用謂詞。我的問題是: 如何省略這些連接?
更新: 問題是如何設計規範,使查詢中的所有規範都具有單個Join元素。我知道我需要重用變量,我需要傳播所有接口對象的規範....怎麼樣?通過參數,通過構造...它聽起來不錯
好吧,我沒有讓自己清楚。問題是如何爲查詢中的所有規範設計規範具有單一的Join元素。我知道我需要重用變量,我需要傳播所有接口對象的規範....怎麼樣?通過參數,通過構造函數...它聽起來不錯。我認爲解決方案是爲特定查詢指定容器的「指定」,並且此對象將根據需要提供單個聯接元素(或創建新聯接元素)。 – user1297783 2012-03-29 11:53:10