# JPA: DB Schema ändern und Daten nicht verlieren - wie?



## SamHotte (24. Okt 2011)

Moin Forum,
leider habe ich weder bei Google noch in der SuFu Glück mit meiner Frage gehabt, vermutlich finde ich nicht den entscheidenden Suchbegriff. Folgendes Problem: ich möchte in einem bestehenden Programm, das ein paar Pojos per JPA/Eclipselink persistiert, Änderungen am Schema vornehmen (Felder hinzufügen im Wesentlichen).
Dabei möchte ich aber - ganz wichtig - die bestehenden Daten behalten, und hier beginnt das Problem. Alle Suchtreffer, die sich überhaupt damit befassen, kommen im letzten Satz mit "natürlich sind dann alle Daten weg" ... ach ja: gesucht habe ich nach "jpa schema ändern", "jpa datenbankschema ändern", "jpa attribut hinzufügen" und ähnlichen zu allgemeinen Begriffen.
Hat jemand eine Idee, wonach ich besser suchen sollte (oder gar einen Tipp zur Lösungsfindung)?
VG
SamHotte


----------



## maki (24. Okt 2011)

Zuerst änderst du den Javacode, dann das Schema(Update Table, Create Table, etc. pp.), dann das Mapping(Annotationen oder XML).


----------



## SamHotte (24. Okt 2011)

Das heißt, ich muss jetzt 'runter auf SQL, da gibt es nix in JPA selbst für?


----------



## maki (24. Okt 2011)

Hibernate bietet etwas, aber ist nciht für die Poduktion gedacht, sondern nur für Dev Umgebungen.

Woher soll ein Programm wissen wie es refaktorn soll?
Sorry, zuviel Risiko für Prod Daten.


----------



## SamHotte (24. Okt 2011)

Eigentlich bräuchte ich ja "nur" ein Pendant zu "ALTER TABLE", also um Felder hinzuzufügen; das ursprüngliche Erstellen des DB-Schemas klappt ja auch von selbst, daher ging ich davon aus, dass JPA auch sowas könnte. Schade - und danke für die Antwort!


----------



## tfa (24. Okt 2011)

SamHotte hat gesagt.:


> Eigentlich bräuchte ich ja "nur" ein Pendant zu "ALTER TABLE", also um Felder hinzuzufügen;


ALTER TABLE ADD COLUMN?
Wenn du "größere" Dinge planst, ist Liquibase | Database Refactoring | home vielleicht interessant. 
Ansonsten würde ich einfach die Spalte der Tabelle (von Hand) hinzufügen.


----------

