Domanda

Ho provato questo:

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

ma succede che

from Table where :par1 is null

restituisce sempre tutte le righe della tabella, anche se: par1 non è null.

, mentre

 select * from table where col1 = 'asdf'

non restituisce alcuna riga.

Non posso usare grammatiche native perché la mia applicazione dovrebbe funzionare su diversi motori di database

È stato utile?

Soluzione

L'equivalente del comando nvl in HQL è il comando coalesce . coalesce (a, b) restituirà a se a non è null, altrimenti b .

Quindi vorresti qualcosa sulle linee di:

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

Altri suggerimenti

Se il tuo database sottostante è Oracle, puoi usare la funzione nvl, l'ho provato e ha funzionato per me.

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

Il tuo caso d'uso può essere diverso e puoi usare la funzione nvl secondo i tuoi requisiti se il database è nvl, non sono sicuro dell'implosione degli altri database, poiché ho usato questo codice solo per Oracle. Spero che sia d'aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top