DB Daten beim Anlegen neuer EntityManagerFactory verloren

Status
Nicht offen für weitere Antworten.
T

TomPomme

Gast
Ich hab jetzt ewig bei google gesucht - jedoch keine Lösung für mein Problem gefunden. Oder liegt es daran, dass ich nicht wirklich weiß, wonach ich suchen soll?

Hier mein Problem:
Ich habe erstmal zum rumprobieren eine Personenklasse geschrieben und kann die Daten auch problemlos in die Datenbank einfügen. Wenn ich jetzt jedoch mein Programm erneut aufrufe und der createEntityManagerFactory(...) aufruf stattfindet, gehen die bereits in der DB enthaltenen Daten verloren.
Was mache ich falsch? Hab ich vergessen irgendwas richtig zu schließen / beenden?

Speichern der Personendaten:
Code:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernatetest");

// Persondaten
final String firstName = (String) request.getParameter("firstName");
final String lastName = (String) request.getParameter("lastName");

// EntityManager
EntityManager manager = emf.createEntityManager();

// Person einfuegen
Person person = new Person(firstName, lastName);
EntityTransaction t = manager.getTransaction();
t.begin();
manager.persist(person);
t.commit();
manager.close();

emf.close();


persistence.xml:

Code:
<persistence ...>
	<persistence-unit name="hibernatetest" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<class>servlettest.bean.Person</class>

		<properties>
			<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
			<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_test" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />

			<property name="hibernate.connection.username" value="ruht" />
			<property name="hibernate.connection.password" value="12345" />

			<property name="hibernate.hbm2ddl.auto" value="create" />

			<property name="hibernate.show_sql" value="true" />
		</properties>
	</persistence-unit>
</persistence>


Auszug aus meinem Personen Pojo:
Ich hab mal in der DB geschaut. ID ist auf auto increment - es werden ja auch nicht alte Personendaten überschrieben, sondern die werden direkt beim Erstellen einer neuen E.M.Factory gelöscht. Der nächste Autoindex ist dann auch wieder bei 1.

Code:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
public int getId() {
    return id;
}
[/code]
 
T

TomPomme

Gast
kleiner Nachtrag:
Ich benutze keinen Application Server sondern nur den Tomcat und MySQL5 DB.
Wäre wirklich toll, wenn mir jemand helfen könnte.
 

ms

Top Contributor
Code:
<property name="hibernate.hbm2ddl.auto" value="create" />
Mit jedem Neustart wird deine Datenbank neu Initialisiert.

ms
 
T

TomPomme

Gast
ms hat gesagt.:
Code:
<property name="hibernate.hbm2ddl.auto" value="create" />
Mit jedem Neustart wird deine Datenbank neu Initialisiert.

ms

Danke für die schnelle Antwort.
Ich hatte leider das Problem, dass ich nur ein kurzes Buchkapitel darüber hatte und da stand lediglich als Kommentar über dieser Zeile: "Flag, ob Tabellen automatisch erzeugt werden sollen"

Ich fand dann zwar auch noch diese Seite:
http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html

Hatte es mir daraufhin aber so erklärt, dass das von mir beschriebene Verhalten durch create-drop ausgelöst werden müsste.
Also sowas wie:

create: CREATE TABLE IF NOT EXISTS...
create-drop: DROP TABLE bla; CREATE TABLE...

Mit
Code:
<property name="hibernate.hbm2ddl.auto" value="update" />
funktioniert nun alles - danke.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben