2012-07-04 8 views
9

Actualmente estoy migrando mi proyecto de Hibernate HBM Mappings a Anotaciones. Todo fue fácil en lo que respecta a las clases pequeñas. Pero tengo las mismas clases enormes y trato de mezclar mapas y anotaciones para esta clase. Leí que esto era posible utilizando la propiedad de hibernación "hibernate.mapping.precedence" y configurándola como "clase, hbm" en lugar de "hbm, clase". (Ver: In Hibernate: is it possible to mix Annotations and XML configuration for an Entity?)Hibernar: migrar del mapeo a las anotaciones: ¿es posible mezclar hbm y anotación?

Por ejemplo tengo la siguiente clase de documento:

@Entity 
@Table(name="DOCUMENT") 
public class Document { 
    @Column(name="DESCRIPTION") 
    private String description; 
} 

y el siguiente archivo de Document.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping> 
    <class name="Document" table="DOCUMENT" > 
    <id name="id" column="DOCUMENT_ID" type="long" /> 
    </class> 
</hibernate-mapping> 

En mi archivo hibernate.cfg.xml pongo:

<property name="hibernate.mapping.precedence">class, hbm</property> 
<mapping class="Document"/> 
<mapping resource="Document.hbm.xml"/> 

Mi problema es que: - si pongo "clase, HBM "Para la precedencia a continuación, sólo tengo mis anotaciones en el Documento de clase - si pongo 'HBM, clase', entonces sólo tengo mis asignaciones en el ressource HBM

¿Alguien knwo si hay una manera de tener dos anotaciones y Mapeos de HBM?

Gracias

Kamran

PS: Consumo: Hibernate 4.1.4 y Spring Framework 3.1.1

Respuesta

11

No se les puede mezclar para la misma clase. Al final de section 1.2 of hibernate annotations:

Puede mezclar clases persistentes anotadas y declaraciones hbm.cfg.xml clásicas con la misma SessionFactory. Sin embargo, no puede declarar una clase varias veces (ya sea anotada oa través de hbm.xml). Tampoco puede mezclar estrategias de configuración (hbm vs annotations) en una jerarquía de entidades.

Para facilitar el proceso de migración de archivos hbm a anotaciones, el mecanismo de configuración detecta la duplicación de asignación entre anotaciones y archivos hbm. Los archivos HBM se priorizan sobre los metadatos anotados en una base de clase a clase. Puede cambiar la prioridad usando la propiedad hibernate.mapping.precedence. El valor predeterminado es hbm, clase, cambiándolo a clase, hbm priorizará las clases anotadas sobre los archivos hbm cuando ocurra un conflicto.

El uso de anotaciones y archivos hbm declara una clase dos veces. Por lo tanto, se priorizará uno sobre el otro en una base de clase a clase (de clase a clase significa que para cada clase, solo se utiliza el archivo hbm o las anotaciones).

+0

Estimado Pablo, muchas gracias por esta aclaración. ! – marcam

+0

Amigo muy útil –

Cuestiones relacionadas