【发布时间】:2015-06-24 04:22:41
【问题描述】:
我有一个 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);
}
除非“某事”为假,否则如果工作正常。 当它为真时,布尔构建器会创建一个子查询来检查 2 个表中的所有行,这需要 2 分钟。 我写了我自己的 sql,它假装了一秒钟。所以我的问题是如何将我的 sql 实现到 HQL/DSL Querty/等。这样 if 检查我的 if 并将参数添加到查询中。 喜欢:
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);
}
现在如何用 OR、AND 等连接对象。
【问题讨论】:
标签: hibernate jpa spring-data-jpa hql querydsl