- Beziehe unter http://mvnrepository.com/artifact/org.apache.openjpa/openjpa-all das openjpa-all-2.2.0.jar (etwas mehr als 6 MiB) und setzte es in den Klassenpfad.
- Habe einen Datentreiber im Klassenpfad (bei mir den der HSQLDB).
- Lege im Projekt einen Ordner META-INF an, platziere dort eine Datei persistence.xml:
- Lege eine Klasse traida.shared.domain.Contact an:
- Schreibe eine main(String[])-Methode mit:
- Fertig, jetzt freuen.
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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 persistence_2_0.xsd"
version="2.0">
<persistence-unit name="traida" transaction-type="RESOURCE_LOCAL">
<class>traida.shared.domain.Contact</class>
<properties>
<property name="openjpa.jdbc.DBDictionary" value="hsql"/>
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:hsqldbtest;user=sa" />
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
<property name="openjpa.Log" value="DefaultLevel=ERROR, Tool=ERROR" />
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
</properties>
</persistence-unit>
</persistence>
Mehr zu den Properties unter http://openjpa.apache.org/builds/apache-openjpa-2.2.1-SNAPSHOT/docs/docbook/manual/main.html.
@Entity
public class Contact {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
public Long id;
public String name;
// Setter/Getter ausgelassen
}
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory( "traida" );
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Contact c = new Contact();
c.name = "Hallo Willi";
entityManager.persist( c );
entityManager.getTransaction().commit();
System.out.println( entityManager.createQuery( "select c from Contact c" ).getResultList() );
entityManager.close();
Das Beispiel wie oben beschrieben läuft bei mir so nicht, openjpa beschwert sich, dass es keine Verbindung zur Datenbank bekommt. Wenn ich die persistence Konfiguration abändere, so dass eine InMemory Datenbank benutzt wird, und ich den User über die dazugehörende Property angebe, funktioniert alles wie es soll:
Als Anmerkung: auf der verlinkten Seite zu OpenJPA sind anstelle der javax.persistence die folgenden Properties definiert:
Nachtrag: dann ohne Spitze Klammern eben ^^
property name=“javax.persistence.jdbc.url“ value=“jdbc:hsqldb:mem:hsqldbtest“
property name=“javax.persistence.jdbc.user“ value=“sa“
und
property name=“openjpa.ConnectionURL“ value=“jdbc:hsqldb:tutorial_database“
property name=“openjpa.ConnectionDriverName“ value=“org.hsqldb.jdbcDriver“
property name=“openjpa.ConnectionUserName“ value=“sa“