저는 검색 웹 서비스를 만들기 위해 QuerydslPredicate (Spring 4.2.5, Spring Boot 1.3.3, querydsl-core 3.7.0)를 사용하고 있습니다. 내 Ticket
엔티티의 속성은 name
, description
등입니다. name
필드에는 완전 항등식을 사용하지만 description
에는 "포함"비교를 원합니다.Spring QuerydslPredicate에서 조건을 재정의
웹 서비스
public Page<Ticket> findAll(@QuerydslPredicate(root = Ticket.class) Predicate predicate, String description) {
BooleanBuilder builder = new BooleanBuilder(predicate);
if (isNotEmpty(description)) {
builder.and(QTicket.ticket.description.containsIgnoreCase(description));
}
return ticketService.findAll(builder, pageable);
}
문제 : 나는 그런 내 웹 서비스 쿼리 할 때 : http...?description=foo
, 두 비교가 description
생성됩니다 (나는 디버거를 시작하고 생성 된 BooleanBuilder 보았다). 의사 코드는 다음과 같이 보입니다 : "description = foo AND description에 foo가 들어 있습니다".
"포함"비교 만하고 싶습니다.
웹 서비스의 매개 변수 description
의 이름을 descriptionFragment
으로 변경했습니다. 이렇게하면 http...?descriptionFragment=foo
으로 전화 할 수 있습니다.
public Page<Ticket> findAll(@QuerydslPredicate(root = Ticket.class) Predicate predicate, String descriptionFragment) {
BooleanBuilder builder = new BooleanBuilder(predicate);
if (isNotEmpty(descriptionFragment)) {
builder.and(QTicket.ticket.description.containsIgnoreCase(descriptionFragment));
}
return ticketService.findAll(builder, pageable);
}
질문 :이 해결 방법을 피하고 싶습니다. description
필드에서 기본 동등성을 무시할 수있는 방법이 있습니까?
를 확장). –