问题
Summary
I'm trying to run a Java web application JPA 2.0 example. The example application was written to run in Glassfish
, using EclipseLink
as JPA provider.
I would like to convert it to run in TomEE
with OpenJPA
as the JPA provider, but I can't any detailed tutorials for getting up and running with OpenJPA
.
Problem
I'm having trouble converting persistence.xml
to work with OpenJPA
instead of EclipseLink
. More specifically, the given persistence.xml
doesn't specify:
Entity
classes. Are these necessary?- The desired JPA provider. Will the container default to something?
- The JDBC driver. How do I specify an "in-memory" DB (just for initial testing purposes)?
Also:
- How are the DDL generation properties expressed in OpenJPA? I wasn't able to find them the OpenJPA User Guide.
Details
Below is the 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>
I have the following Entity
classes:
order.entity.LineItem
order.entity.LineItemKey
order.entity.Order
order.entity.Part
order.entity.PartKey
order.entity.Vendor
order.entity.VendorPart
Question
- Does anyone know what the equivalent persistence.xml would look like for OpenJPA?
- Alternatively, if anyone could point me to an OpenJPA tutorial that covers these issues that would be just as good
回答1:
If you add the openjpa.jdbc.SynchronizeMappings
property as shown below OpenJPA will auto-create all your tables, all your primary keys and all foreign keys exactly to match your objects
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Alternatively, you can use EclipseLink in TomEE by just adding the EclipseLink jars to <CATALINA_HOME>/lib/
refer here for Common PersistenceProvider properties
回答2:
Foreign key constraints
The next line does not create foreign keys:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
Only creates schema and deletes content of a database.
But if you want create foreign keys, use the following lines:
<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"/>
See generated SQL
In another way, if you want to see the SQL output:
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
NOTE: In order to see the generated output in the TomEE console, you need to change the log level in the file loggin.properties
with openjpa.level = FINEST
See more in http://openjpa.apache.org/faq.html
来源:https://stackoverflow.com/questions/10677950/ddl-generation-and-general-persistence-xml-settings-openjpa