摘要
我正在尝试运行Java Web应用程序JPA 2.0示例。编写example application以在Glassfish
中运行,使用EclipseLink
作为JPA提供程序。
我希望将其转换为TomEE
并使用OpenJPA
作为JPA提供程序运行,但我无法使用OpenJPA
启动和运行任何详细教程。
问题
我无法将persistence.xml
转换为使用OpenJPA
代替EclipseLink
。更具体地说,给定的persistence.xml
未指定:
Entity
课程。这些是必要的吗?此外:
详情
以下是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
问题
答案 0 :(得分:7)
如果您添加openjpa.jdbc.SynchronizeMappings
属性,如下所示,OpenJPA将自动创建所有表格,所有主键和所有外键完全匹配您的对象
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
或者,只需将EclipseLink jar添加到<CATALINA_HOME>/lib/
答案 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输出:
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
注意:要在TomEE控制台中查看生成的输出,您需要使用loggin.properties
更改文件openjpa.level = FINEST
中的日志级别子>