2010-04-30 16 views
8

Im Blick auf einfaches Problem mit der Suche nach Entitäten durch einige (Sub-) Zeichenfolge, die sie enthalten könnten.JPQL (JPA) Suche Teilzeichenfolge

z. Ich habe Benutzer user1, usr2, useeeer3, user4 und ich werde eingeben, um Fenster "verwenden" zu suchen, und ich erwarte, Benutzer1, Useeer3, Benutzer4 zurückzugeben.

Ich bin sicher, Sie wissen, was ich jetzt meine. Gibt es eine Konstruktion in JPA (JQPL)? Es wäre schön, mit WHERE irgendwie in benannten Abfragen zu suchen. Etwas wie "SELECT u FROM Benutzer u WHERE u.nickname enthält: Teilstring"

Antwort

13

Verwenden Sie einen Ausdruck LIKE. Hier ist ein Zitat aus dem Abschnitt 4.6.9 Wie Expression des JPA 1.0 spec (JSR 220):

Die Syntax für die Verwendung des Vergleichsoperators [NOT] LIKE in einem Bedingungsausdruck lautet wie folgt:

string_expression [NOT] LIKE pattern_value [ESCAPE escape_character] 

Die string_expression muss einen String-Wert haben. Die pattern_value ist ein Stringliteral oder ein String-wertige Eingabeparameter, in dem ein Unterstreichungs (_) für ein beliebiges Zeichen steht, ein Prozent (%) Zeichen steht für eine beliebige Folge von Zeichen (einschließlich der leere Sequenz) und alle anderen Zeichen stehen für sich. Die optional escape_character ist ein Einzelzeichen Stringliteral oder ein Zeichen-wertige Eingangsparameter (d.h. char oder Character) und ist verwendet, um die spezielle Bedeutung von der Unterstrich und Prozentzeichen in pattern_value zu entkommen.

Beispiele sind:

  • address.phone LIKE '12% 3' gilt für die '123' '12993' und falsch für '1234'
  • asentence.word LIKE ‚l_se "gilt für 'verlieren' und falsch für 'lose'
  • aword.underscored LIKE '\ _%' ESCAPE '\' gilt für '_foo' und false für 'bar'
  • address.phone NICHT '12% 3' LIKE ist falsch für '123' und '12993' und wahre für '1234'

Wenn der Wert der string_expression oder pattern_value ist NULL oder unbekannt, der Wert des Ausdrucks LIKE ist unbekannt. Wenn escape_character angegeben ist und NULL ist, ist der Wert des LIKE Ausdrucks unbekannt.

+0

Vielen Dank :-) – JavaBeginner