unlisted template exclude example classes java jpa persistence-unit

java - template - persistence.xml netbeans



¿Frascos múltiples, solución de unidad de persistencia única? (1)

Sí, esto está permitido por la especificación JPA.

Las asignaciones de entidades XML están diseñadas para anular las anotaciones JPA. A menos que cambie específicamente el comportamiento predeterminado usando la etiqueta <xml-mapping-metadata-complete/> , el proveedor de JPA usará anotaciones donde no haya una asignación XML.

Aquí hay un extracto de la especificación JPA 2.0 :

12.1 Uso del descriptor XML

... La ausencia o presencia del subelemento xml-mapping-metadata-complete contenido en el subelemento persistence-unit-defaults del elemento entity-mappings controla si el objeto XML / descriptor de mapeo relacional se usa para anular selectivamente los valores de anotación o si Sirve como una alternativa completa a las anotaciones de metadatos del lenguaje Java.

Si se especifica el subelemento xml-mapping-metadata-complete, el conjunto completo de metadatos de mapeo para la unidad de persistencia está contenido en los archivos de mapeo XML para la unidad de persistencia, y se ignoran las anotaciones de persistencia en las clases.

Algunas personas, incluyéndome a mí, han estado luchando para fusionar entidades de diferentes módulos (tarros) en una sola unidad de persistencia (especialmente con JavaSE , por ejemplo, aquí JPA 2.0: agregar clases de entidad a PersistenceUnit * de diferentes jar * automáticamente ). Según las respuestas, no hay una forma directa y fácil de hacerlo. Una de las soluciones es enumerar todas las clases de todos los archivos jar en un solo archivo de unidad de persistencia, pero eso no es realmente elegante. Podría haber encontrado accidentalmente otra manera. En general, todas mis clases de entidad se asignan mediante anotaciones . En cuanto a la solución: persistence.xml puede incluir múltiples archivos de mapeo XML, por ejemplo:

main.jar! META-INF / persistence.xml:

<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL"> <mapping-file>META-INF/order-mappings.xml</mapping-file> <mapping-file>META-INF/customer-mappings.xml</mapping-file> </persistence-unit>

Los archivos de mapeo se pueden colocar en diferentes tarros. Lo que noté es que pueden contener elementos <entity> sin ningún atributo , por ejemplo:

order.jar! META-INF / order-mappings.xml

<entity-mappings> <entity class="com.company.Order"></entity> </entity-mappings>

¡Incluso si el archivo de mapeo no asigna ningún atributo, las anotaciones en la clase Java se toman en cuenta de todas formas y todo parece funcionar bien! Eso significaría que es fácil incluir entidades de múltiples archivos en una sola unidad de persistencia simplemente mediante la inclusión de archivos de mapeo XML de JAR particulares.

Mi pregunta es: ¿es esto un uso de archivo de mapeo JPA permitido o simplemente un efecto secundario de mi proveedor de persistencia (Hibernate)?