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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top