tbone13
Grünschnabel
Hallo zusammen!
Ich arbeite mich in JPA ein und verstehe grad das Verhalten meines Systems nicht. Ich habe eine einfach Entity Class und eine Main Class. Letztere erzeugt zwei Instanzen der Entität und persistiert sie in die DB. So weit so gut. Rufe ich aber das Programm erneut auf, werden die Datensätze in der Datenbank überschrieben und ich hab wieder nur 2 Datensätze. Es sind aber immer zwei neue, dass habe ich mittels einer zufallszahl in den Datensätzen sichergestellt. Außerdem gegen eine HSQLDB und gegen Apache Derby getestet.
Ich bin rat- und sprachlos. Ich versteh das doch eigentlich so, dass persistierte Datensätze erhalten bleiben sollen. Also sollten pro aufruf meine Main neue Sätze in DB geschrieben werden.
Lange Rede, kurzer Sinn; hier der Code:
Die Bohne "Person"
Die Main Klasse
Die persistence.xml
Hier jetzt mit der Derby-Konfiguration
Ich bin für jeden Fingerzeig dankbar!
Grüß
Tobi
Ich arbeite mich in JPA ein und verstehe grad das Verhalten meines Systems nicht. Ich habe eine einfach Entity Class und eine Main Class. Letztere erzeugt zwei Instanzen der Entität und persistiert sie in die DB. So weit so gut. Rufe ich aber das Programm erneut auf, werden die Datensätze in der Datenbank überschrieben und ich hab wieder nur 2 Datensätze. Es sind aber immer zwei neue, dass habe ich mittels einer zufallszahl in den Datensätzen sichergestellt. Außerdem gegen eine HSQLDB und gegen Apache Derby getestet.
Ich bin rat- und sprachlos. Ich versteh das doch eigentlich so, dass persistierte Datensätze erhalten bleiben sollen. Also sollten pro aufruf meine Main neue Sätze in DB geschrieben werden.
Lange Rede, kurzer Sinn; hier der Code:
Die Bohne "Person"
Code:
package org.spiceeinc.JPAStandalone;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Entity implementation class for Entity: Person
*
*/
@Entity
@Table(name = "person")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Basic
@Column(name = "first_name", length = 120)
private String firstName;
@Basic
@Column(name = "last_name", length = 120)
private String lastName;
protected Person() {
super();
}
public Person(String firstName, String lastName) {
// super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getId() {
return id;
}
private static final long serialVersionUID = 1L;
@Override
public String toString() {
// TODO Auto-generated method stub
return "Person: " + "[" + id + "]: " + firstName + " " + lastName;
}
}
Die Main Klasse
Code:
package org.spiceeinc.JPAStandalone;
import java.util.Random;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
try {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("JPAStandalone");
createPerson(emf);
createPerson(emf);
findByPrimaryKey(emf, 1);
findByPrimaryKey(emf, 2);
// TODO something else
emf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void findByPrimaryKey(EntityManagerFactory emf, int i) {
EntityManager manager = emf.createEntityManager();
Person p = manager.find(Person.class, i);
if (p != null) {
System.out.println(p.toString());
} else {
System.out.println("Datensatz nicht gefunden");
}
manager.close();
}
private static void createPerson(EntityManagerFactory emf) {
EntityManager manager = emf.createEntityManager();
manager.getTransaction().begin();
Random r = new Random();
int i = r.nextInt();
Person person = new Person("Tobi" + i, "Schroeder" + i);
manager.persist(person);
manager.getTransaction().commit();
manager.close();
// DEBUG Ausgabe des Objekts
System.out.println("Das erzeugte Objekt: " + person.toString());
}
}
Die persistence.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="JPAStandalone" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>
org.spiceeinc.JPAStandalone.Person</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/myDB" />
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
<property name="hibernate.connection.username" value="me" />
<property name="hibernate.connection.password" value="mine" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Hier jetzt mit der Derby-Konfiguration
Ich bin für jeden Fingerzeig dankbar!
Grüß
Tobi