2016-04-19 10 views
2

Ich habe eine Controller-Methode wie so für die SucheSuche nach null mit querydsl

@RequestMapping(method = RequestMethod.GET) 
public Page<MyEntity> find(@QuerydslPredicate(root = MyEntity.class) 
            Predicate predicate, 
         Pageable pageable) { 

    return this.myEntityRepository.findAll(predicate, pageable); 
} 

Es funktioniert großartig. Ich kann eine GET Anfrage mit verschiedenen Abfragezeichenkettenparametern ausstellen, und es filtert entsprechend, aber jetzt möchte ich nach null suchen. Ich habe versucht, etwas wie , aber das predicate Argument ist immer null.

Wie kann ich suchen, wo bestimmte Felder null sind?

Antwort

1

Es gibt keine Möglichkeit, eine Entität nach Nullparametern wie myParam1=null zu durchsuchen, da sie eine NullPointerException auslöst. Ich hatte das gleiche Problem und das ist der einzige Weg, wie ich es zum Laufen bringen könnte.


@RequestMapping(method = RequestMethod.GET) 
public Page find(@QuerydslPredicate(root = MyEntity.class) Predicate predicate, Pageable pageable, @RequestParam MultiValueMap parameters) { 

    Page entities = myEntityRepository.findAll(predicate, pageable); 
    if(parameters.get("myParam1") != null && 
      parameters.get("myParam1").get(0) != null && 
      parameters.get("myParam1").get(0).isEmpty()) { 

     QEntity entity = QEntity.entity; 
     BooleanExpression myParam1IsNull = entity.in(entities.getContent()).and(entities.myParam1.isNull()); 
     entities = myEntityRepository.findAll(myParam1IsNull, pageable); 
    } 

    return entities; 
} 

Es führt zwei Abfragen an die Datenbank aus, aber es löst das Problem. Ich hoffe das hilft dir.

+0

Ich endete beim Erstellen zusätzlicher Ressourcen/Routen mit dem Verhalten hart codiert. Trotzdem danke. –