Spring Data - Multi-Spalte sucht
Bin ich mit Spring-Data für das paging und das Sortieren. Allerdings würde ich gerne durchführen multi-Spalten sucht.
Nun, ich bin mit der annotation @Abfrage in meinem repository interface wie dieses:
public interface MyRepository extends PagingAndSortingRepository<Item,Long> {
@Query(value="select mt from MY_TABLE mt where mt.field1 = %searchtext% or mt.field2 = %searchtext% or mt.field3 = %searchtext%")
Page<Item> findByAllColumns(@Param("searchtext") String searchtext, Pageable pageable);
}
edit: Das problem bei dieser Lösung ist in der where-Klausel der @Query Anmerkung, da haben wir zu wiederholen, die genau die gleiche searchtext parameter für jede Spalte, die wir suchen wollen, die auf (Klärung der Frage nach dem Kommentar von Brandon Oakley)
Ich würde gerne wissen, ob es eine andere Art zu tun, weil die Anzahl der Spalten in einer Tabelle können hoch sein.
Vielen Dank für Ihre Hilfe.
- Dies kann die Antwort auf Ihre Frage... stackoverflow.com/a/20121813/2267073
- Ich bin nicht sicher, wie Sie Sie: das problem in meiner jetzigen Lösung ist in der where-Klausel der @Query Anmerkung, da haben wir zu wiederholen, die genau die gleiche searchtext parameter für jede Spalte, die wir suchen möchten. So Frage ich mich, ob es eine andere, elegantere Art und Weise zu tun, die uns erlauben würde, nur geben Sie den Namen der Spalten.
- Deine Antwort ist sehr interessant, aber für andere Situationen. So, danke für die Anregung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie Spezifikationen. Das gibt Ihnen auch mehr Flexibilität. Sie können eine Methode, sondern verwenden Sie mehrere Vorgaben für eine Abfrage:
Hier ist das Beispiel einer solchen Spezifikation für Benutzer:
oder noch mehr anpassbare Umsetzung:
Verwendung:
Specifications
ist jetzt veraltet zugunsten vonSpecification
.Kombination der beiden vorherigen Antworten: wenn Sie nicht wollen, um einige Ihrer API und Datenbank-schema oder in anderen Worten, Sie wollen nicht die Benutzer, um eine string-Spalte-name - filtern Sie jene Attribute, die nicht strings und gelten
like
alle diejenigen, die es sind. Im folgenden Beispiel wird es versuchen, die Suchetext
im Werte von Spalten:name
,field1
,field2
undfield3
.Entity Beispiel:
Spezifikation Beispiel:
Repository Beispiel:
Beispiel:
weiteres update (suchen in alle Arten von Spalten mit white-listing der Felder mit lambdas - code ist nicht aktiviert)
root.getModel().getDeclaredSingularAttributes()
ist für ältere Versionen von Java/Spring DataSpecifications
ist jetzt veraltet zugunsten vonSpecification
.