假设我有两个静态方法:
public static Specification<SomeEntity> isSomeValue() {
return (root, query, builder) -> {
Join<SomeEntity, JoinEntity> join = root.join("joinEntity");
return builder.equal(join.get("someProperty"), "someValue");
};
}
和
public static Specification<SomeEntity> isSomeOtherValue() {
return (root, query, builder) -> {
Join<SomeEntity, JoinEntity> join = root.join("joinEntity");
return builder.equal(join.get("someOtherProperty"), "someOtherValue");
};
}
我可以只需要两者之一或两者都需要。当我需要两者时,我会使用组合并做类似的事情
someEntityRepository.find(isSomeValue().and(isSomeOtherValue()));
我的问题是:当两种方法都使用相同的连接时,可以编写规范吗?我应该保持这样还是应该做另一种方法以免重复加入?
当然,上面是简化的假例子。我试图更好地了解它在表面下是如何工作的。
答案 0 :(得分:1)
如果您将这两个规范结合起来,您最终会得到两个连接,这可能不是您想要的。
您可以使用 root.getJoins()
来确定连接是否已经存在,如果存在,则将其用于谓词,否则创建一个新连接。