Question

J'ai essayé ceci:

from Table where (:par1 is null or col1 = :par1)

mais il arrive que

from Table where :par1 is null

renvoie toujours toutes les lignes de la table, même si le: par1 n'est pas null.

pendant

 select * from table where col1 = 'asdf'

ne renvoie aucune ligne.

Je ne peux pas utiliser de grammaires natives car mon application est supposée s'exécuter sur différents moteurs de base de données

Était-ce utile?

La solution

L’équivalent de la commande nvl dans HQL est la commande coalesce . coalesce (a, b) renverra a si a n'est pas nul, sinon b .

Donc, vous voudriez quelque chose sur les lignes de:

from Table where col1 = coalesce(:par1, 'asdf')

Autres conseils

Si votre base de données sous-jacente est Oracle, vous pouvez utiliser la fonction nvl. Je l'ai essayée et cela a fonctionné pour moi.

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));

Votre cas d'utilisation peut être différent et vous pouvez utiliser la fonction nvl selon vos besoins si la base de données est nvl, vous n'êtes pas sûr de l'implécation des autres bases de données car j'ai utilisé ce code uniquement pour Oracle. J'espère que ça aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top