У меня есть следующий запрос: QueryDSLQueryDsl - оператор ИЛИ не работает
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 ?
Он использует счетчик, потому что это первый запрос, который использует Spring Data для постраничного результата ,
Являетесь ли обязательная собственность компании и человека? Вы проверили, как выглядит SQL-запрос? –
@ TimoWestkämper no, они необязательны ... Я обновил вопрос сгенерированным запросом. спасибо –