2015-04-17 200 views
2

我有一个queryDsl booleanbuilder查询,因为很多的,如果在我的代码:QueryDsql生成一个查询没有booleanbuilder

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); 
} 

如果优秀作品,除非“某事”是假的。 当它为true时,booleanbuilder将创建一个子查询,用于检查2个表中花费2分钟的所有行。 我写了我自己的SQL,它伪造了一秒钟。所以我的问题是如何实现我的SQL到HQL/DSL的Querty /等。所以如果检查我的是否并添加参数查询。 像:

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

    QA qa = QA.a; 
    JPAQuery query = new JPAQuesry(); 
    query.leftjoin(myobiects); 

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

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

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

    return repo.findInDB(query, pageable); 
} 

现在如何与Connet的物体或,等

回答

0

的BooleanBuilder实例可以通过调用其中被用作查询谓词:

query.where(bb); 
0

嘛问题是关于如何加快查询速度。我想知道如何改变代码等,但最后我决定创建一个外键索引(JoinedObjectTable.ForeignKeyToQA - 当query.where(qa.joinedObject.any()创建了一个子查询)。因此该指数将速度从2分钟提高至约0.05瑞典克朗。