# Mit JPA Tabellen löschen



## Gast01 (1. Dez 2008)

Eigentlich scheint meine Frage zu einfach zu sein, da Google dazu nix ausspuckt, aber ich komme irgendwie nicht drauf:

Ich nutze JPA und möchte gerne aus einer Klasse heraus bestimmte Tabellen komplett löschen, um sie anschließend mit frischen Daten initialisieren zu können. 
Ich dachte da zunächst an zwei Varianten:

- hibernate.hbm2ddl.auto auf create-drop stellen. Aber dann wird die Tabelle bei jedem Neustart des Servers gelöscht, das will ich ja nicht.

- Über ein nativeQuery ein drop table und create table ausführen. Das klappt nicht.

Wie sollte also meine init() Methode aussehen?


----------



## maki (1. Dez 2008)

JPA ist nicht dazu da um DB Tabellen zu löschen, erstellen oder zu ändern.

Wenn du die Datenstruktur nicht ändern möchtest, würde es ja reichen, die Daten zu löschen.


----------



## Guest (2. Dez 2008)

maki hat gesagt.:
			
		

> JPA ist nicht dazu da um DB Tabellen zu löschen, erstellen oder zu ändern.
> 
> Wenn du die Datenstruktur nicht ändern möchtest, würde es ja reichen, die Daten zu löschen.



Hmm ok. Ich arbeite auf einer Mysql Datenbank und mir gehts jetzt darum, die Daten zu löschen und die "Sequenz"(also Auto_Increment) wieder auf 1 zu setzen.


----------



## Gast (2. Dez 2008)

Nur deswegen wollte ich die Tabelle "droppen" und wieder "createn".


----------



## maki (2. Dez 2008)

Sollte doch mit mit einer "normalen" JDBC Connection zu lösen sein.

Warum ist es wichtig den internen Schlüssel zurückzusetzen/zu steuern?


----------



## byte (2. Dez 2008)

Welche JPA Implementierung benutzt Du denn? Hibernate bietet die Möglichkeit, das Schema wegzuschmeissen und alles neu zu erzeugen. Die Funktion ist natürlich mit Vorsicht zu genießen. Ist aber durchaus praktisch, wenn man ein neues Schema von der grünen Wiese entwickelt.

Ansonsten schreibst (oder generierst) Du Dir halt DDL Scripte zum Dropen und Erzeugen der gewünschten Tabellen. Oder machst es kurz manuell, wenns ein einmaliger Vorgang ist.


----------



## Guest (2. Dez 2008)

Ich wollte für Tests die ids vorhersehbar machen und darum immer mal wieder zwischendurch zurücksetzen. Da ich sowieso schon JPA nutzte, wollte ich das eben damit auch gleich erledigen und nicht extra eine jdbc connection aufbauen. Habs dann z.B. mit nem truncate und nem native query probiert, aber das ging nicht. Ka was ich da vorher falsch gemacht hatte, aber nun funktioniert das was ich will auf einmal ^^ 


```
String deleteQueryStr = "truncate table testdaten";
		Query deleteQuery = em.createNativeQuery(deleteQueryStr );
		deleteQuery.executeUpdate();
```

Macht jedenfalls das was ich will 

@byto
Ja ich benutze Hibernate. Meinst du mit der Schema wegschmeißen und neu erzeugen Funktion das was ich im Eingangspost kurz erwähnt hatte? Also:
"- hibernate.hbm2ddl.auto auf create-drop stellen." Falls ja, wäre es noch ganz interessant zu wissen wie man diese Funktion triggern kann, ohne den Server neu zu starten.


Danke für alle Antworten =)


----------



## maki (2. Dez 2008)

> ch wollte für Tests die ids vorhersehbar machen und darum immer mal wieder zwischendurch zurücksetzen.


Sag das doch gleich.

Dafür nimmt man DBUnit!! 

Dann einfach für CLEAN_INSERT oder REFRESH_UPDATE als Strategie enscheiden und die sache ist gegessen, viel besser als alles zu Fuss selber machen


----------



## Guest (2. Dez 2008)

Oh, gut, wunderbar


----------

