2012-01-18 19 views
6

Estoy usando Hibernate durante algunos años pero no estoy seguro acerca del uso de Query and Criteria.Hibernar y cómo evitar el cambio de nombre de modales

Entiendo que una de las fortalezas de Hibernate es controlar el nombre del campo en un solo lugar. Si tengo el siguiente código:

List cats = sess.createCriteria(Cat.class) 
.add(Restrictions.like("name", "Fritz%")) 
.add(Restrictions.between("weight", minWeight, maxWeight)) 
.list(); 

Qué pasa si cambio "nombre" del gato en el objeto java?

¡Incluso cuando se utiliza refactor replace (como en Elipse) no detectará el elemento como algo que debe cambiarse!

En caso afirmativo, ¿cómo se mantienen los nombres de los campos en Java?

+1

Pruebas unitarias. No se me ocurre ningún otro mecanismo. – Adi

Respuesta

3

Creo que las consultas de tipo seguro no son compatibles con la API específica de Hibernate. JPA 2 sin embargo tiene soporte para ello. Lea esto: Dynamic, typesafe queries in JPA 2.0

+0

¿Significa que no puedo usarlo con mi implementación actual de hibernación? – Dejell

+0

@Odelya sí, su opción es pasar a JPA 2 –

+0

¿No se puede hibernar como aplicación JPA? – Dejell

0

Tengo el mismo problema en el pasado, y en realidad no hay forma de tener una referencia tipeada y resistente al refactorizador (nombre de cambio) de un campo en Java, por lo que tampoco es posible tener un generador de consultas que permiten esto, pero traté de construir una implementación de un generador de consultas que, utilizando una solución alternativa, intente permitirle escribir una consulta segura y refactorizada, su nombre es ObjectQuery y puede encontrar información sobre here.

¡Avísame si soluciona tu caso de uso!

obviamente no es nada estándar, por lo que si está buscando algo estándar, ¡es mejor JPA Typesafe pero no tiene la misma potencia!

Cuestiones relacionadas