我正在使用带有QueryDslPredicateExecutor
我有以下实体;
@Table(name="a_table")
@Entity
public class A {
@OneToOne
@JoinColumn(name = "b_id")
private B b;
}
@Table(name="b_table")
@Entity
public class B {
@Column(...)
private String name;
}
当我构建Predicate
以传递到我的存储库时,我会做这样的事情。
QA qa = QA.a;
BooleanBuilder booleanBuilder = new BooleanBuilder();
for(String name : strings) {
BooleanExpression b_name_eq= qa.b.name.eq(name);
BooleanExpression some_other_expression = ...;
booleanBuilder.or(ExpressionUtils.and(b_name_eq, some_other_expression));
}
return booleanBuilder.getValue();
这导致查询如下
select ... , ... , ...
from a_table at
cross join b_table bt
where at.b_id=bt.id
and (bt.name=? and some_other_expression or bt.name=? and some_other_expression or ...)
我的问题是,我可以控制何时生成我的谓词以使用除交叉连接之外的加入?因为一些专家认为交叉连接很慢。我知道我可以通过JPAQuery
轻松完成此操作,但我们并未使用它。任何帮助都将受到高度赞赏。