Usar Expresiones EL como Valores de Parámetros en las Consultas


Solo hay una restricción, en las aplicaciones FundeWeb 1.5 que despliegan en Weblogic 12.1 no se puede utilizar ya que provoca errores de casting de clases.

Para las aplicaciones FundeWeb 1.5 que despliegan en Weblogic 12.2, no hay problema ya que en la Wiki de Migracion se trata la modificación necesaria para que funcione correctamente.


Ahora podemos establecer como valores de parámetros en las consultas expresiones EL de tipo ValueExpression, es decir, nosotros obtenemos nuestra Query del Entity Manager y establecemos los parámetros con el método setParameter(String name, Object value) o setParameter(int position, Object value).

Ejemplo de un metodo añadido en el DAS:

    public Foo getFooELParameter() {
       Query query = getEntityManager().createQuery( "select entity from Foo entity where entity.propertyOne = :parameterOne" );
       query.setParameter( "parameterOne", "#{miBean.miProperty}" );
       return query.getSingleResult();
    }


También podemos establecer el valor de un hint mediante expresiones EL en el método setHint(int position, Object value), ejemplo:

    public Foo getFooELParameterAndHint() {
       Query query = getEntityManager().createQuery( "select entity from Foo entity where entity.propertyOne = :parameterOne" );
       query.setParameter( "parameterOne", "#{miBean.miProperty}" );
       query.setHint("javax.persistence.query.timeout", "#{jpaBackbean.queryTimeout}" );
       return query.getSingleResult();
    }


En los métodos internos de la clase DataAccessServiceImpl que aceptan parameters o hints, también funciona, ejemplo:

    public List<Foo> getFoosELParameterAndHint2() {
        List<String> restrictions = new ArrayList<String>();
        restrictions.add( "entity.propertyOne = :parameterOne" )
 
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put( "parameterOne", "#{miBean.miProperty}" );
 
        Map<String, Object> hints = new HashMap<String, Object>();
        hints.put( "javax.persistence.query.timeout", "#{jpaBackbean.queryTimeout}" );
 
        return findByEntityQueryWithDinamicFilter( restrictions, parameters, 0, 25, null, null, hints );
    }


Además, se pueden utilizar expresiones EL en el método setProperty(String propertyName, Object value) del Entity Manager.


JUAN MIGUEL BERNAL GONZALEZ 11/03/2020 17:32