2016-03-23 22 views
0

Ich bin neu in Hibernate und ich erstelle eine einfache Film-Finder-App in Java. Ich muss eine Abfrage in meinem Dao machen, um Filme nach einer Liste von Schlüsselwörtern zu suchen. Ich weiß, wie man es in SQL macht, aber ich frage mich, ob es eine Möglichkeit gibt, eine HQL-Abfrage zu machen, um dies zu tun. Die Java-Methode in der dao erhält eine Liste, die eine Liste von keyowrds ist und die SQL-Anweisung wie folgt aus:Gibt es eine Möglichkeit, diese Abfrage in HQL zu tun?

SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ... 

So notwendig dies zu erreichen, die ganze Liste iterieren Trog und die Abfrage für jedes Keyword verketten.

Es ist möglich, diese Abfrage in HQL einfacher zu machen, damit Sie eine Liste von Schlüsselwörtern an die Abfrage von que übergeben können, damit sie diese mit der LIKE-Anweisung verwenden kann?

Danke.

Antwort

1
SELECT * 
FROM movies 
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' 

Würde zu HQL als

from movies m where m.name like :keyword1 or m.name like :keyword2 

übersetzen Sie müssen die benannte Parameter keyword1 und keyword2 zu übergeben, wenn die Abfrage.

Und wenn Sie darauf bestehen, die like Matcher zu verwenden, müssen Sie die Liste durchlaufen und die Abfrage dynamisch generieren.

Die andere Möglichkeit besteht darin, die IN-Klausel mit dem HQL zu verwenden, die jedoch Wildcard-Übereinstimmungen unmöglich machen würde.

from movies m where m.name in (:keywords) 
+0

Hallo, vielen Dank für Ihre Antwort! Ich muss den SQL-Platzhalter "%" verwenden, also besteht die einzige Möglichkeit darin, die Schlüsselwörterliste zu iterieren und die Abfragezeichenfolge auf der rechten Seite zu erstellen? Außerdem muss ich die Liste ein zweites Mal wiederholen, um die Parameter richtig einzustellen? Vielen Dank! –

+0

Ja. Sie können die Parameter jedoch auch in derselben Iteration erstellen. – Thihara

+0

In diesem Fall könnte es einfacher sein, die Standard '' '- Parameter anstelle von' benannten' Parametern zu verwenden. – Thihara

0
Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf"); 
qry.setString("sf",'%'+searchField+'%'); 
Verwandte Themen