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:

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.
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top