Frage
Ich habe versucht, dies:
from Table where (:par1 is null or col1 = :par1)
, aber es kommt vor, dass
from Table where :par1 is null
immer gibt alle Zeilen der Tabelle, auch wenn die. Par1 nicht null
, während
select * from table where col1 = 'asdf'
zurückkehrt keine Zeile.
Ich kann nicht verwenden nativer Grammatiken, weil meine Anwendung soll auf verschiedenen Datenbank-Engines ausgeführt
Lösung
Das entspricht den nvl
Befehl in HQL ist der coalesce
Befehl. coalesce(a,b)
kehrt a
wenn a
nicht Null ist, andernfalls b
.
So können Sie etwas auf den Linien wollen würde:
from Table where col1 = coalesce(:par1, 'asdf')
Andere Tipps
Wenn die zugrunde liegende Datenbank ist Oracle dann Sie die NVL-Funktion nutzen können, habe ich versucht, es und es funktionierte für mich.
Query query = session.createQuery(
" select ft from FeatureToggle ft left outer join ft.featureToggleCustomerMap "
+ " ftcm where nvl(ftcm.custId,:custId) = :custId");
query.setParameter("custId", Long.valueOf(custId));
Ihr Anwendungsfall kann diffrent sein und Sie die Funktion NVL wie pro Ihre Anforderung verwenden können, wenn die Datenbank NVL ist, über die implecation der anderen Datenbanken nicht sicher, wie ich diesen Code verwendet haben, nur für Oracle. Hoffe, es hilft.