DDL 生成和常规 persistence.xml 设置 (OpenJPA)
-
12-12-2019 - |
题
概括
我正在尝试运行 Java Web 应用程序 JPA 2.0 示例。这 示例应用程序 被写入运行 Glassfish
, , 使用 EclipseLink
作为 JPA 提供商。我想将其转换为运行 TomEE
和 OpenJPA
作为 JPA 提供者,但我无法获得任何有关启动和运行的详细教程 OpenJPA
.
问题
我在转换时遇到问题 persistence.xml
跟...共事 OpenJPA
代替 EclipseLink
. 。更具体地说,给定 persistence.xml
没有指定:
Entity
类。这些有必要吗?- 所需的 JPA 提供者。容器会默认什么吗?
- JDBC 驱动程序。如何指定“内存中”数据库(仅用于初始测试目的)?
还:
- OpenJPA 中如何表达 DDL 生成属性?我没能找到他们 OpenJPA 用户指南.
细节
下面是 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.jdbc.SynchronizeMappings
如下所示的属性 OpenJPA 将自动创建您的所有表、所有主键和所有外键,以完全匹配您的对象
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
或者,您可以在 TomEE 中使用 EclipseLink,只需将 EclipseLink jar 添加到 <CATALINA_HOME>/lib/
其他提示
外键约束
下一行不创建外键:
<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
不隶属于 StackOverflow