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 el :par1 no es null.

mientras

 select * from table where col1 = 'asdf'

no devuelve ninguna fila.

No puedo usar el nativo de gramáticas porque mi aplicación debe ejecutarse en diferentes motores de base de datos

InformationsquelleAutor | 2009-03-02

2 Comentarios

  1. 62

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

    Por lo que se quiere algo en las líneas de:

    from Table where col1 = coalesce(:par1, 'asdf')
    • Lo que yo quería en realidad era: de la Tabla donde col1 = unen(:par1, col1) y funcionó! muchas gracias!
    • se unen() es también una ANSI SQL función, y debería funcionar en la mayoría de las bases de datos, por ejemplo, Oracle, de forma nativa.
    • también en la entidad jpa consulta con nombre no trabajan con nvl sino que trabajamos con unen
  2. 3

    Si su base de datos es Oracle, a continuación, puede utilizar la función nvl, lo he probado y a mí me funcionó.

    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 utilizar la función nvl como por su exigencia si la base de datos es nvl, no estoy seguro acerca de la implecation de las otras bases de datos, el uso de este código sólo para Oracle.
    Espero que ayude.

    • El OP se ha mencionado que la aplicación se ejecute en diferentes bases de datos. En cuyo caso, esta no es la respuesta esperada.

Dejar respuesta

Please enter your comment!
Please enter your name here