Wie initialisieren Sie die Spezifikation von Federdaten JPA?Java

Java-Forum
Anonymous
 Wie initialisieren Sie die Spezifikation von Federdaten JPA?

Post by Anonymous »

Ich habe eine Methode, die eine Suche mit Filtern durchführt. Daher verwende ich die Spezifikation, um eine dynamische Abfrage zu erstellen: < /p>

Code: Select all

public Page searchFoo(@NotNull Foo probe, @NotNull Pageable pageable) {

Specification spec = Specification.where(null);  // is this ok?

if (probe.getName() != null) {
spec.and(FooSpecs.containsName(probe.getName()));
}
if (probe.getState() != null) {
spec.and(FooSpecs.hasState(probe.getState()));
}
//and so on...

return fooRepo.findAll(spec, pageable);
}
< /code>
Es besteht die Möglichkeit, dass keine Filter angegeben sind, daher würde ich alles ohne Filterung auflisten. Wenn ich das im Sinn habe, wie sollte ich Spec 
initialisieren? Derzeit funktioniert der obige Code nicht, da er mir immer das gleiche Ergebnis zurückgibt: Alle Register der Tabelle, keine Filterung wurden ausgegeben, und Operationen wurden durchgeführt.
foospecs:

Code: Select all

public class PrescriptionSpecs {

public static Specification containsCode(String code) {
return (root, criteriaQuery, criteriaBuilder) ->
criteriaBuilder.like(root.get(Prescription_.code), "%" + code + "%");
}

// some methods matching objects...
public static Specification hasContractor(Contractor contractor) {
return (root, criteriaQuery, criteriaBuilder) ->
criteriaBuilder.equal(root.get(Prescription_.contractor), contractor);
}
//... also some methods that access nested objects, not sure about this
public static Specification containsUserCode(String userCode) {
return (root, criteriaQuery, criteriaBuilder) ->
criteriaBuilder.like(root.get(Prescription_.user).get(User_.code), "%" + userCode + "%");
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post