2017-09-05 1 views
0

Ich habe eine HQL-Abfrage, die msisdn und subServiceId auf eine Entity-Abmeldung dauert.Wie man ODER-Bedingung in HQL anwendet?

Unten finden Sie den Code für das gleiche:

Query query = session.createSQLQuery(unsubscriptionInfodemo) 
       .addEntity(Unsubscription.class) 
       .setParameter("msisdn", msisdn) 
       .setParameter("subServiceId", subServiceId); 

Nun, ich brauche in dieser Unsubscription Einheit zu prüfen, ob subServiceId ist die subServiceId ich bestanden haben, oder es soll die subServiceId ich hartkodiert habe sein.

Kann ich mich wie

public void checkUser(String msisdn,String subServiceID){ 
Query query = session.createSQLQuery(unsubscriptionInfodemo) 
       .addEntity(Unsubscription.class) 
       .setParameter("msisdn", msisdn) 
       .setParameter("subServiceId", subServiceId) 
       .setParameter("subServiceId", "XYZ"); 
} 

HQL-Abfrage:

unsubscriptionInfodemo=select * from unsubscription s where s.msisdn=:msisdn and s.subservice_id=:subServiceId 

Kann jemand mich leiten, wie Sie vorgehen?

+0

'unsubscriptionInfodemo' was ist der Wert dieses? – msagala25

+0

Ja, ohne Ihre Frage zu zeigen, ist es sinnlos zu fragen. – fhossfel

+0

Okay Bearbeitete den Code –

Antwort

-1

Die dynamische Funktionalität, die Sie implementieren möchten, kann nicht mit hql durchgeführt werden, ohne die hql-Zeichenfolge zu ändern.

Ich würde die Verwendung der criteria api, die eine dynamische Funktionalität bietet.

Die einfachste Möglichkeit besteht darin, die hql-Zeichenfolge basierend auf dem Wert zu erstellen (falls subServiceId vorhanden ist oder nicht) oder das Kriterium api zu verwenden. Sie müssen also nur einen zusätzlichen equals-Filter hinzufügen, falls subServiceId vorhanden ist.

Die Frage sollte geändert werden, wie dynamische Bedingungen zu HQL basierend auf Variablenpräsenz hinzugefügt werden.

Überprüfen Sie auch this answer

0

Wie in HQL oder einen Zustand bewerben?

Verwendung OR auf Anfrage:

select * from unsubscription s where s.msisdn=:msisdn and s.subservice_id=:subServiceId OR 
s.subservice_id=:subServiceId2 

und Name Parameter sollten nicht die gleichen sein:

.setParameter("msisdn", msisdn) 
.setParameter("subServiceId", subServiceId) 
.setParameter("subServiceId2", "XYZ"); // Make this subServiceId2 
+0

Kommentar hier, wer meine Antwort downvoted. – msagala25

+0

Kann ich wie diese ausgewählten tun * von Abmelde s wo s.msisdn =: msisdn und s.subservice_id IN (subServiceId, subServiceId2) .setParameter ("msisdn", msisdn) .setParameter ("subServiceId", subServiceId) . setParameter ("subServiceId2", "XYZ"); // Mache diese subServiceId2 –

Verwandte Themen