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

Posted

技术标签:

【中文标题】DDL 生成和常规 persistence.xml 设置 (OpenJPA)【英文标题】:DDL generation and general persistence.xml settings (OpenJPA) 【发布时间】:2012-05-27 12:32:33 【问题描述】:

总结

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

问题

我无法将persistence.xml 转换为OpenJPA 而不是EclipseLink。更具体地说,给定的persistence.xml 没有指定:

Entity 类。这些有必要吗? 所需的 JPA 提供程序。容器会默认设置吗? JDBC 驱动程序。如何指定“内存中”数据库(仅用于初始测试目的)?

还有:

如何在 OpenJPA 中表示 DDL 生成属性?我找不到他们OpenJPA User Guide。

详情

下面是 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 教程,那也一样好

【问题讨论】:

您有没有花时间阅读 OpenJPA 用户手册? 如果你有一个特定的链接,那将是 swell。我现在正在经历这些:openjpa.apache.org/samples.html 我找不到任何用于 DDL 生成的 persistence.xml 属性,在这里:openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/manual.html 【参考方案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 中查看更多信息

【讨论】:

【参考方案2】:

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

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

或者,您可以在 TomEE 中使用 EclipseLink,只需将 EclipseLink jar 添加到 &lt;CATALINA_HOME&gt;/lib/

参考这里Common PersistenceProvider properties

【讨论】:

谢谢。我下载了 EclipseLink,但不确定我需要哪些 .jar 文件。我在 EclipseLink/jlib/jpa/ 中找到了以下 jar 文件:'eclipselink-jpa-modelgen_2.3.2.v20111125-r10461.jar'、'javax.persistence_1.0.0.jar'、'javax.persistence_2.0.3.v201010191057.jar '.这些是我需要复制到 lib/ 中的唯一文件吗? 我猜这是一个新问题,我将创建另一个问题。感谢您的回答 您告诉我要创建什么表,但我必须知道如何防止 openjpa 尝试创建表?类似: 只需删除openjpa.jdbc.SynchronizeMappings 属性即可。

以上是关于DDL 生成和常规 persistence.xml 设置 (OpenJPA)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Wildfly 部署时设置 hibernate.hbm2ddl.auto 不使用 persistence.xml

persistence.xml:hibernate.hbm2ddl.auto=create-drop 不工作

不使用 Java EE 8 生成表

JPA 对象关系映射总结---persistence.xml 文件配置要点

元模型和 Persistence.xml 文件

急求懂javax.persistence和hibernate的IT人解答