我有以下QueryDSL查询:QueryDsl - OR语句不工作
QCustomer customer = QCustomer.customer;
BooleanBuilder builder = new BooleanBuilder();
builder.or(customer.person.name.containsIgnoreCase(query));
builder.or(customer.company.name.containsIgnoreCase(query));
return builder;
而且我希望得到从包含包含查询参数的名称=查询和/或公司的人的结果。但我什么也没得到。
这是我Customer
类的映射:
@OneToOne(orphanRemoval = false, optional = true, cascade = CascadeType.ALL)
private Company company;
@OneToOne(orphanRemoval = false, optional = true, cascade = CascadeType.ALL)
private Person person;
是否有人知道我在这里失踪?
我希望得到这样的查询:
select o
from Customer
where o.person.name like '%:name%' or o.company.name like '%:name%'
这是生成的查询:
select
count(customer0_.uid) as col_0_0_
from
Customer customer0_
cross join
Person person1_
cross join
Company company2_
where
customer0_.person_uid=person1_.uid
and customer0_.company_uid = company2_.uid
and (lower(person1_.name) like ? escape '!' or lower(company2_.name) like ? escape '!') limit ?
它使用的计数,因为它是春天的数据使用分页结果中的第一个查询。
既是公司又是人的强制性财产?你检查了SQL查询的样子吗? –
@TimoWestkämper不,他们是可选的...我用生成的查询更新了问题。谢谢 –