Pergunta

Resumo

Estou tentando executar um Java web application JPA 2.0 exemplo.O exemplo de aplicação foi escrito para ser executado no Glassfish, usando EclipseLink como provedor de JPA.Eu gostaria de convertê-lo para ser executado no TomEE com OpenJPA como o provedor de JPA, mas eu não posso qualquer tutoriais detalhados para levantar e correr com OpenJPA.

Problema

Eu estou tendo problemas de conversão persistence.xml para trabalhar com OpenJPA em vez de EclipseLink.Mais especificamente, o dado persistence.xml não especificar:

  • Entity classes.São elas necessárias?
  • O desejado provedor de JPA.Será que o recipiente padrão para algo?
  • O driver JDBC.Como faço para especificar uma "memória" DB (apenas a inicial para fins de teste)?

Também:

  • Como a geração de DDL de propriedades expressas em OpenJPA?Eu não era capaz de encontrá-los a OpenJPA Guia Do Usuário.

Detalhes

Abaixo está o EclipseLink 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>

Eu tenho o seguinte Entity classes:

  • order.entity.LineItem
  • order.entity.LineItemKey
  • order.entity.Order
  • order.entity.Part
  • order.entity.PartKey
  • order.entity.Vendor
  • order.entity.VendorPart

Pergunta

  • Alguém sabe o que o equivalente persistence.xml seria OpenJPA?
  • Em alternativa, se alguém poderia me apontar para um OpenJPA tutorial que aborda estes problemas seria tão bom
Foi útil?

Solução

Se você adicionar o openjpa.jdbc.SynchronizeMappings propriedade, conforme mostrado abaixo OpenJPA irá criar automaticamente em todas as mesas, todas as suas chaves primárias e todas as chaves estrangeiras exatamente para combinar com seus objetos

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

Como alternativa, você pode usar EclipseLink em TomEE, apenas adicionando o EclipseLink frascos para <CATALINA_HOME>/lib/

consulte aqui para Comum PersistenceProvider propriedades

Outras dicas

Restrições de chave estrangeira

A linha seguinte não criar chaves estrangeiras:

<property name="openjpa.jdbc.SynchronizeMappings" 
          value="buildSchema(ForeignKeys=true)"/>

Apenas cria o esquema e exclui o conteúdo de um banco de dados.

Mas se você pretende criar chaves estrangeiras, utilizar as seguintes linhas:

<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"/>

Consulte SQL gerado

De outra forma, se você quiser ver o SQL saída:

<property name="openjpa.Log" 
          value="DefaultLevel=TRACE,SQL=TRACE" />

NOTA:Para ver a saída gerada no TomEE console, você precisa alterar o nível de log no arquivo loggin.properties com openjpa.level = FINEST


Veja mais em http://openjpa.apache.org/faq.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top