在为QueryDSL构建谓词时交叉连接

sha*_*zin 6 cross-join querydsl spring-data-jpa

我正在使用带有Spring Data Jpa的Query DSL 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;
}
Run Code Online (Sandbox Code Playgroud)

当我构建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();
Run Code Online (Sandbox Code Playgroud)

这会产生如下查询

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 ...)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以控制何时生成我的Predicate以使用除交叉连接之外的Join?因为一些专家认为交叉连接很慢.我知道我可以轻松地做到这一点,JPAQuery但我们没有使用它.任何帮助将受到高度赞赏.