Hallo, ich versuche, eine Suche mit 4 Felder, aber einige von ihnen möglicherweise Null, wenn ich die Suche machen. Deshalb habe ich mich für queryDsl entschieden. Das ist mein pom.xmlNull-Zeiger-Ausnahme, wenn ich QueryDsl verwenden Prädikat von SpringData
<dependency>
<groupId>com.mysema.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
I ClientPredicate.java
final class ClientPredicates {
private ClientPredicates() {
}
static Predicate firstnameOrLastnameOrCinOrPhoneNberContainsIgnoreCase(String searchTerm) {
if (searchTerm == null || searchTerm.isEmpty()) {
return (Predicate) QClient.client.isNotNull();
} else {
return (Predicate) QClient.client.firstname.containsIgnoreCase(searchTerm)
.or(QClient.client.lastname.containsIgnoreCase(searchTerm)).or
(QClient.client.cin.containsIgnoreCase(searchTerm)).or(QClient.client.phoneNber.containsIgnoreCase(searchTerm));
}
}
}
QClient.java
@Generated("com.mysema.query.codegen.EntitySerializer")
public class QClient extends EntityPathBase<Client> {
private static final long serialVersionUID = -797939782L;
public static final QClient client = new QClient("client");
public final StringPath createdByUser = createString("createdByUser");
public final DateTimePath<java.time.ZonedDateTime> creationTime = createDateTime("creationTime", java.time.ZonedDateTime.class);
public final StringPath firstname = createString("firstname");
public final StringPath lastname = createString("lastname");
public final StringPath cin = createString("cin");
public final StringPath phoneNber = createString("phoneNber");
public final NumberPath<Long> id = createNumber("id", Long.class);
public final DateTimePath<java.time.ZonedDateTime> modificationTime = createDateTime("modificationTime", java.time.ZonedDateTime.class);
public final StringPath modifiedByUser = createString("modifiedByUser");
public final NumberPath<Long> version = createNumber("version", Long.class);
public QClient(String variable) {
super(Client.class, forVariable(variable));
}
public QClient(Path<Client> path) {
super(path.getType(), path.getMetadata());
}
public QClient(PathMetadata<?> metadata) {
super(Client.class, metadata);
}
}
Und ich habe diesen Code in meinem Controller gemacht:
@RequestMapping(value = "/seekClient", method = RequestMethod.POST, headers = "Accept=application/json")
public @ResponseBody List<Client> seekClient(@RequestBody Client client) {
Predicate firstnameAndLastnameAndCinAndPhoneNberAre = QClient.client.firstname.eq(client.getFirstname())
.and(QClient.client.lastname.eq(client.getLastname()));
System.out.println("*************************** "+firstnameAndLastnameAndCinAndPhoneNberAre);
List<Client> list = (List<Client>) clientRepository.findAll(firstnameAndLastnameAndCinAndPhoneNberAre);
return list;
}
Die p Jedes Mal, wenn ich ein leeres Feld sende, bekomme ich eine nullPointerException. Irgendwelche Hilfe bitte. Es ist Stunden, dass ich blockiert bin
wenn ich hinzufügen sollte checks was ist der Nutzen von querydsl Ich könnte überprüfen und einfache Abfragen machen ?? rechts – zzooee
Besuchen Sie die erste und zweite Zeile Ihres Controllers. Sie rufen die Methoden getFirstname und getLastname für den Methodenparameter auf. Dies ist nicht möglich, wenn es null ist. –