DDL生成和常规persistence.xml设置(OpenJPA)

时间:2012-05-20 23:03:25

标签: java jpa openjpa openejb apache-tomee

摘要

我正在尝试运行Java Web应用程序JPA 2.0示例。编写example application以在Glassfish中运行,使用EclipseLink作为JPA提供程序。 我希望将其转换为TomEE并使用OpenJPA作为JPA提供程序运行,但我无法使用OpenJPA启动和运行任何详细教程。

问题

我无法将persistence.xml转换为使用OpenJPA代替EclipseLink。更具体地说,给定的persistence.xml未指定:

  • Entity课程。这些是必要的吗?
  • 所需的JPA提供商。容器会默认为什么吗?
  • JDBC驱动程序。如何指定“内存中”DB(仅用于初始测试目的)?

此外:

详情

以下是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>

我有以下Entity课程:

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

问题

  • 有没有人知道OpenJPA的等效persistence.xml是什么样的?
  • 或者,如果有人能指出我的OpenJPA教程,涵盖这些问题那么好

2 个答案:

答案 0 :(得分:7)

如果您添加openjpa.jdbc.SynchronizeMappings属性,如下所示,OpenJPA将自动创建所有表格,所有主键和所有外键完全匹配您的对象

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

或者,只需将EclipseLink jar添加到<CATALINA_HOME>/lib/

,就可以在TomEE中使用EclipseLink

请参阅Common PersistenceProvider properties

答案 1 :(得分:1)

外键约束

下一行不会创建外键:

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

仅创建架构并删除数据库的内容。

但是如果要创建外键,请使用以下行:

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

请参阅生成的SQL

另一方面,如果要查看SQL输出:

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

注意:要在TomEE控制台中查看生成的输出,您需要使用loggin.properties更改文件openjpa.level = FINEST中的日志级别


http://openjpa.apache.org/faq.html

中查看详情