Generación de DDL y configuración general de persistence.xml (OpenJPA)
-
12-12-2019 - |
Pregunta
Resumen
Estoy intentando ejecutar un ejemplo de aplicación web Java JPA 2.0.El aplicación de ejemplo fue escrito para correr en Glassfish
, usando EclipseLink
como proveedor de JPA.Me gustaría convertirlo para ejecutarlo. TomEE
con OpenJPA
como proveedor de JPA, pero no puedo encontrar tutoriales detallados para comenzar a utilizar OpenJPA
.
Problema
Tengo problemas para convertir persistence.xml
trabajar con OpenJPA
en lugar de EclipseLink
.Más específicamente, lo dado persistence.xml
no especifica:
Entity
clases.¿Son necesarios?- El proveedor JPA deseado.¿El contenedor tendrá algo por defecto?
- El controlador JDBC.¿Cómo especifico una base de datos "en memoria" (solo para fines de prueba iniciales)?
También:
- ¿Cómo se expresan las propiedades de generación de DDL en OpenJPA?No pude encontrarlos Guía del usuario de OpenJPA.
Detalles
A continuación se muestra el enlace Eclipse. persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
tengo lo siguiente Entity
clases:
order.entity.LineItem
order.entity.LineItemKey
order.entity.Order
order.entity.Part
order.entity.PartKey
order.entity.Vendor
order.entity.VendorPart
Pregunta
- ¿Alguien sabe cómo sería el persistence.xml equivalente para OpenJPA?
- Alternativamente, si alguien pudiera indicarme un tutorial de OpenJPA que cubra estos temas, sería igual de bueno.
Solución
Si agregas el openjpa.jdbc.SynchronizeMappings
propiedad como se muestra a continuación OpenJPA creará automáticamente todas sus tablas, todas sus claves primarias y todas las claves externas exactamente para que coincidan con sus objetos
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Alternativamente, puede usar EclipseLink en TomEE simplemente agregando los archivos jar de EclipseLink a <CATALINA_HOME>/lib/
consulte aquí para Propiedades comunes de PersistenceProvider
Otros consejos
Restricciones de clave externa
La siguiente línea no crea claves foráneas:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
Solo crea esquema y elimina contenido de una base de datos.
Pero si desea crear claves externas, utilice las siguientes líneas:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(foreignKeys=true,schemaAction='dropDB,add')"/>
<property name="openjpa.jdbc.SchemaFactory"
value="native(foreignKeys=true)" />
<property name="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
Ver SQL generado
De otra manera, si quieres ver la salida SQL:
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
NOTA:Para ver el resultado generado en la consola TomEE, debe cambiar el nivel de registro en el archivo loggin.properties
con openjpa.level = FINEST
Ver más en http://openjpa.apache.org/faq.html