A geração de DDL e geral persistence.xml definições (OpenJPA)
-
12-12-2019 - |
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
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