Hibernate QueryDsql不使用booleanbuilder生成查询

Hibernate QueryDsql不使用booleanbuilder生成查询,hibernate,jpa,spring-data-jpa,hql,querydsl,Hibernate,Jpa,Spring Data Jpa,Hql,Querydsl,我有一个queryDsl booleanbuilder查询,因为我的代码中有很多if: private Page<QA> query(Pageable pageable, QAFilter filter) { QA qa = QA.a; BooleanBuilder bb = new BooleanBuilder(); if (StringUtils.qaNotBlank(filter.getParam())) { bb.and(lik

我有一个queryDsl booleanbuilder查询,因为我的代码中有很多if:

 private Page<QA> query(Pageable pageable, QAFilter filter) {

    QA qa = QA.a;
    BooleanBuilder bb = new BooleanBuilder();


    if (StringUtils.qaNotBlank(filter.getParam())) {
        bb.and(likePredicate(qa.param, filter.getCode()));
    }

    if (StringUtils.qaNotBlank(filter.get2param())) {
        bb.and(qa.locationCode.eq(filter.2param()));
    }

    if (sth == true) {
        bb.or(qa.joinedObject.any().field.eq(filter.param));
    }

    return repo.findAll(bb.getValue(), pageable);
}
专用页面查询(可分页、可分页、QAFilter过滤器){
QA=QA.a;
BooleanBuilder bb=新的BooleanBuilder();
if(StringUtils.qaNotBlank(filter.getParam())){
和(如ePredicate(qa.param,filter.getCode());
}
if(StringUtils.qaNotBlank(filter.get2param())){
和(qa.locationCode.eq(filter.2param());
}
如果(某事物=true){
或(qa.joinedObject.any().field.eq(filter.param));
}
返回repo.findAll(bb.getValue(),可分页);
}
除非“某物”是假的,否则If可以正常工作。 如果为true,booleanbuilder将创建一个子查询,用于检查两个表中的所有行,这需要2分钟。 我自己编写了sql,但它一秒钟就伪造了。所以我的问题是如何将我的sql实现为HQL/DSL Querty/等,以便if检查我的if并将参数添加到查询中。 比如:

专用页面查询(可分页、可分页、QAFilter过滤器){
QA=QA.a;
JPAQuery query=newjpaquesry();
leftjoin(myobiects);
if(StringUtils.qaNotBlank(filter.getParam())){
query.where(比如predicate(qa.param,filter.getCode());
}
if(StringUtils.qaNotBlank(filter.get2param())){
query.where(qa.locationCode.eq(filter.2param());
}
如果(某事物=true){
query.where(qa.joinedObject.any().field.eq(filter.param));
}
返回repo.findInDB(查询,可分页);
}

现在,如何将对象与或等连接起来。

BooleanBuilder实例可以通过调用where作为查询谓词:

query.where(bb);

问题是如何加快查询速度。我想知道如何更改代码等,但最后我决定在外键上创建一个索引(JoinedObjectTable.ForeignKeyToQA-作为
query.where(qa.joinedObject.any()
创建了一个子查询)。因此索引将速度从2分钟提高到了约0,05 sek

query.where(bb);