martes, 12 de enero de 2010

Like con campos enteros JPQL

Hay un artilugio para poder usar like en campos enteros , es concatenando una cadena vacia al entero esto lo combierte el campo a cadena y puedo usar el Like normalmente.
La fucion en jpql quedaria: CONCAT(campoint,'');

EJ:

return em.createQuery("select p from Localidad p Where UPPER(p.nombre) Like :texto " + " OR UPPER(CONCAT(p.codigo,'')) Like :texto order by p.nombre")
.setParameter("texto", texto.toUpperCase() +'%').getResultList();

2 comentarios:

Optimus dijo...

No entiendo cómo puede funcionar algo así. Me refiero a cuando haces

setParameter("texto", texto.toUpperCase() +'%')

No se supone que cuando das valor a un parámetro, éste es escapado por el driver de JDBC? Dicho de otra manera, qué impide que, si el texto viene del usuario, éste no pueda contener el wildcard "%" al principio, por ejemplo, y con ello el usuario desmonte el tipo de consulta que tú quieres hacer?

Optimus dijo...

No entiendo cómo puede funcionar algo así. Me refiero a cuando haces

setParameter("texto", texto.toUpperCase() +'%')

No se supone que cuando das valor a un parámetro, éste es escapado por el driver de JDBC? Dicho de otra manera, qué impide que, si el texto viene del usuario, éste no pueda contener el wildcard "%" al principio, por ejemplo, y con ello el usuario desmonte el tipo de consulta que tú quieres hacer?