2016-11-29 3 views
0

Ich frage mich, wenn möglich, mit Sammlungen diese Art der Auswertung zu machen, wie die Abfrage nicht in einer Klasse mit dem Namen Abfrage wie folgt in meinem Projekt arbeiten:Hibernate - where-Klausel jeder mit Sammlung als benannte Parameter-Abfrage

@NamedQueries(value = { 
@NamedQuery(
name = "Foo.getBarList", 
query = "select f from Foo f where (:barlist is null or f.barlist.id in (:barslist)) ")}) 

aus dieser beide Beitrag:

FROM Foo WHERE Id = :id AND (:barlist is null or Bar in (:barlist)) JPA where clause any

Hibernate HQL Query : How to set a Collection as a named parameter of a Query?

Ich denke, das Problem ist die ID in Abfrage war so ich entfernen und der Fehlerstopp, dies nur ändern:
"select f from Foo f where (:barlist is null or f.barlist in (:barslist)) "

Antwort

1

statt in HQL Sie

if(barlist==null){ 
    //query=FROM Foo WHERE Id = :id 
}else{ 
    //query=FROM Foo WHERE Id = :id AND Bar in :barlist 
    // query.setParameterList(:barlist",<list object>) 
} 
+0

Dank überprüfen können, einen Weg zu zeigen, aber ich werde wie mit 2 benannten Abfragen beenden: '@NamedQueries (Wert = { \t \t @NamedQuery (name = "Foo.get", \t \t \t \t query = "select e von Foo e" \t \t \t \t \t \t + "wo (: id ist null oder e.id =: id)" \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t), \t \t @NamedQuery (name = "Foo.getBarList", \t \t query = "wählen Sie e aus Foo e" \t \t \t \t + "wo (: id null ist oder e.id =: id)" \t \t \t \t \t \t \t \t + "und (: barlist ist null oder e.barlist.id in (: barslist)) " \t \t \t \t \t \t)})' und der DAO-Code wird auch eine Strategie, wenn dann sonst dort behandeln. –

+0

der DAO-Code wird mit einer Strategie umgehen, wenn dann auch dort so etwas wie: 'Session session = sessionFactory.openSession(); \t \t \t String sql = ""; \t \t \t if (f.getBarList() isEmpty().) \t \t \t \t sql = "Foo.get"; \t \t \t sonst \t \t \t \t sql = "Foo.getBarList"; \t \t \t Abfrage query = session.getNamedQuery (sql); \t \t \t if (! F.getBarList().isEmpty()) \t \t \t \t query.setParameterList ("barlist", f.getBarList()); ' –

+1

können Sie auch versuchen, diese zu prüfen, ob Parameter in Abfrage gibt es .. https: //docs.jboss. org/hibernate/orm/3.5/javadocs/orga/hibernate/Query.html # getNamedParameters() – Musaddique

Verwandte Themen