2011-11-29 18 views
10

¿Es necesario hacer una elección estricta entre el uso de anotaciones y los archivos de configuración de hibernación, o es posible utilizar ambos métodos al mismo tiempo en el mismo proyecto?¿Es posible usar anotaciones y archivos hbm.xml en el mismo proyecto en Hibernate?

Tenemos un gran proyecto hecho con Hibernate 3.2.5 y POJO configurados con .hbm.xml archivos. El proyecto utiliza la fábrica de Hibernate SessionManager y no la fábrica EntityManager basada en JTA.

Hay más de cien POJO configurados de esta manera y el equipo desarrollador original es reacio a cambiar a las anotaciones.

Mientras tanto, necesitamos extender el proyecto con más POJOs que estamos dispuestos a configurar con las anotaciones de Hibernate y queremos quedarnos con Hibernate, si es posible, y no cambiar a JPA.

¿Es posible utilizar una combinación de archivos de configuración .hbm.xml para algunos POJO y anotaciones para otros al mismo tiempo?

+1

Dado el funcionamiento de herramientas como NetBeans y en muchos casos incluso Eclipse, a menudo recibo errores incluso cuando codigo y configuro las cosas correctamente.Entonces, para algo incluso muchos expertos de Java dicen "no sé, nunca lo intenté", no perdería mi prueba de tiempo-error sin estar seguro si es mi error, o el IDE, o simplemente porque simplemente no se puede hacer en Java/Hibernate. – Skyhan

Respuesta

7

Manu ha dado la respuesta, pero si va a cambiar a anotaciones y desea convertir esos hbm.xml en anotaciones. Continúa por favor. Puede usar las herramientas que generarán las clases pojo con anotaciones de las tablas existentes. Incluso usando esas herramientas, no tienes que cambiar el otro código, solo genera los pojos como antes. es decir, no cambie los nombres de las propiedades. He trabajado en el mismo proyecto y utilicé el script Ant para eso.

13

Sí, puedes. ElDocumentation dice

Tenga en cuenta que usted puede mezclar el uso hbm.xml legado y el enfoque de anotación. El elemento de recurso puede ser un archivo hbm o un descriptor de despliegue XML EJB3.

hay algunas punto de control sin embargo:

sin embargo, puede no declarar una clase varias veces (ya sea anotado o por medio de hbm.xml). Tampoco puede mezclar estrategias de configuración (hbm vs annotations) en una jerarquía de entidades.

Puede encontrar más información here.

0

Creo que esta publicación es genial, pero con el ejemplo de código real, será mejor. He intentado con ManuPK ref y así es como funciona.
Mi ref real está aquí: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/ch01.html#setup-configuration

//typical way to use cfg.xml 
Configuration cfg = new Configuration(); 
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory(); 
Session s = f.openSession(); 
s.persist(new EntityObj()); 

//to use both annotation & cfg.xml mappings, use AnnotationConfiguration instead of Configuration 
AnnotationConfiguration cfg = new AnnotationConfiguration(); 
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory(); 
Session s = f.openSession(); 
s.persist(new EntityObj()); 

AnnotationConfiguration leerá el cfg.xml como de costumbre para analizar tanto < de recursos de asignación = "your_entity.hbm.xml"/> y < clase de asignación = "mi. entity.objclass "/ >

Negación: he intentado utilizar el viejo Hibernate 3.2.1 y ver que está funcionando bien.

Cuestiones relacionadas