Pregunta

He intentado esto:

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

pero sucede que

from Table where :par1 is null

siempre devuelve todas las filas de la tabla, incluso si: par1 no es nulo.

mientras

 select * from table where col1 = 'asdf'

no devuelve ninguna fila.

No puedo usar gramáticas nativas porque se supone que mi aplicación se ejecuta en diferentes motores de base de datos

¿Fue útil?

Solución

El equivalente al comando nvl en HQL es el comando coalesce . coalesce (a, b) devolverá a si a no es nulo, de lo contrario b .

Así que querrías algo en las líneas de:

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

Otros consejos

Si su base de datos subyacente es Oracle, puede usar la función nvl, la probé y funcionó para mí.

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

Su caso de uso puede ser diferente y puede usar la función nvl según sus requisitos si la base de datos es nvl, no estoy seguro de la implementación de las otras bases de datos, ya que he usado este código solo para Oracle. Espero que ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top