Hibernate QueryDsql不使用booleanbuilder生成查询
我有一个queryDsl booleanbuilder查询,因为我的代码中有很多if: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
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);