2014-07-09 8 views
15

In Spring-Daten JPA, gibt es sowieso eine Methodenabfrage zu erstellen, die im Wesentlichen von sucht?SpringData JPA-Repository-Methode Abfrage mit einem like?

Ich habe die folgende Methode Abfrage

public MakeModel findByModelIgnoreCase(String model); 

Was ich wirklich will, ist ein Ausdruck wie. Muss ich nur eine Criteria- oder eine @Query-Annotation erstellen? Frage ich zu viel?

Wirklich ich denke, im Herzen davon, ich möchte eine Tabelle suchen. Ich verwende Hibernate unter Spring Data, also könnte ich ein Such-API wie Hibernate Search verwenden. Ich bin offen für Empfehlungen hier.

+0

JPQL hat LIKE: https://blogs.oracle.com/JPQL01/entry/how_to_use_like_expression –

+1

http://docs.spring.io/spring-data/jpa/docs/1.6.1.RELEASE/reference/ html/jpa.repositories.html # jpa.query-methods.query-creation – axtavt

+0

axtavt das ist genau das, was ich brauchte ... – chrislhardin

Antwort

20

Wie wird ebenfalls unterstützt: "%" hinzufügen am Anfang zu sagen, dass es kein striktes Start Spiel sein egal, das gleiche an:

MakeModel findByModelLikeIgnoreCase(String model); 

Wenn Sie die Methode der follwing verwenden nennen das Ende, oder Sie können eines von ihnen verwenden, hängt davon ab, wie Sie wollen.

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%"); 

wenn Ihr make test ist und die Zeichenfolge "%"+model+"%" zu vergleichen, ist dann:

es is a match , T is a match , test is a match 

die Zeichenfolge zu vergleichen, ist model+"%":

te is a match , es is not . 
+4

Große Antwort! Vielleicht möchten Sie die Schlüsselwörter 'Containing' /' Contains' erwähnen, die dasselbe tun, aber nicht verlangen, dass der Client die gleiche Syntax für den bestimmten Speicher kennt. –

23

Wenn Sie nicht tun Wenn Sie "%" manuell hinzufügen möchten, können Sie die folgenden Abfragemethoden verwenden:

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%' 
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model' 
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%' 
+0

1 kleines Detail, IgnoreCase => ILIKE – dwana