JPA / Hibernate: validación basada en código de consultas jpa
Pregunta
¿Cuál es la forma correcta de validar una consulta jpa mediante programación? Hibernate valida todas las consultas con nombre basadas en anotaciones en las entidades. Pero, ¿cómo puedo llamar a esta rutina de validación en consultas jpa integradas mediante programación para verificar si hay errores?
@Entity public class Foo { @Id public int id; public String name; }
main(...) { Query q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); // validate q here }
Solución
No lo hagas. Prueba de integración con tu código, utilizando una base de datos real con el mismo esquema que tu entorno de producción.
Piénselo: si crea una consulta con formato incorrecto, es un error de programación . ¿Qué vas a hacer con la información? ¿Decirle al usuario que una consulta JPA está mal formada? Todo lo que puede hacer de forma realista es registrar el error y decirle al usuario "algo malo sucedió". Sabrás que es una consulta mal formada cuando revises los registros más tarde de todos modos ...
Editar
También podría valer la pena investigar la llamada createQuery ()
alimentándola con datos incorrectos: el javadoc aquí sugiere que puede lanzar una HibernateException
, y no estoy seguro qué podría hacer con una cadena que no sea validarla ...
Otros consejos
O puede usar createQuery, o necesita poner el nombre de su clase mientras escribe un JPQL.