Ich benutze QuerydslPredicate (Frühjahr 4.2.5, Spring Boot 1.3.3, Querydsl-Core 3.7.0), um einen Such-Web-Service zu erstellen. Meine Ticket
Einheit verfügt über Eigenschaften wie name
, description
usw. ich eine strikte Gleichheit will auf das name
Feld, sondern ein „enthält“ Vergleich auf den description
.Override-Bedingung im Frühjahr QuerydslPredicate
Der Webservice
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);
}
Problem: wenn ich so meine Web-Service-Abfrage: http...?description=foo
werden zwei Vergleiche für die description
erzeugt (Ich begann einen Debugger und schaute auf die erzeugte BooleanBuilder). Der Pseudocode sieht so aus: "description = foo AND description enthält foo".
Ich möchte nur den "enthält" Vergleich behalten.
Ich habe eine Problemumgehung gefunden: Ich habe einfach Web Service-Parameter description
in descriptionFragment
umbenannt. Auf diese Weise kann ich http...?descriptionFragment=foo
anrufen.
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);
}
Frage: Ich möchte diese Problemumgehung vermeiden. Gibt es eine Möglichkeit, die Standardgleichheit für das Feld description
zu überschreiben?
Sie bitte Ihre Frage in einer tatsächlichen Antwort, für SO Leser Sichtbarkeit zu erhöhen (siehe https://stackoverflow.com/help/self-answer). –