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