JPA und Vererbung

Deadalus

Bekanntes Mitglied
Hallo,

sagen wir ich habe eine Klasse Person und eine Klasse Angestellter. Ein Angestellter erbt nun von Person.
Beides sind konkrete Klassen und ich verwende aktuell die "OneTableStrategy" um die Entities in der Datenbank abzubilden.

Das funktioniert auch ohne Probleme aber nun würde ich gerne folgendes machen:

  • Aus einer Person einen Angestellten machen
  • Aus einem Angestellten eine einfache Person machen.

Alle meine bisherigen Versuche haben leider nicht funktioniert. Nun habe ich nur noch die Idee den alten Datensatz zu löschen und einen neuen Anzulegen. Ist aber natürlich nicht die schönste Lösung. Kennt jemand eine bessere?
 

Cage Hunter

Aktives Mitglied
Ich versteh dein Problem nicht

"Aus einer Person einen Angestellten machen, Aus einem Angestellten eine einfache Person machen."

Geht es hier um's Casten oder willst du die Klassen umbenennen oder wie oder wo oder was?
Deine "Anfrage" ist einfach viel zu ungenau, mir jedenfalls :)
 

Deadalus

Bekanntes Mitglied
Erst mal danke für anschauen.

Mir geht es um die Persistierung in der Datenbank mit JPA.

Ich will eine Person auslese und als Angestellten in der Datenbank abspeichern.
Das ganze halt auch umgekehrt. Also Angestellten auslesen und als einfache Person in der Datenbank speichern.

Eigentlich müssten dafür ja nur die Kindklassen Attribute je nach Fall auf einen Wert oder auf null gesetzt werden. Der "dType" der Klasse ändert sich aber nicht egal was ich mache.
 

tfa

Top Contributor
Möglicherweise ist das Klassenmodell nicht ganz sauber. Wenn Personen und Angestellte einfach so ineinander umgewandelt werden sollen, ist das wohl eher eine Eigenschaft als unterschiedliche Klassen. Vielleicht sollte hier man auf Vererbung verzichten und es mit Komposition versuchen.
Andernfalls ist ein Löschen und Neuanlegen wahrscheinlich die sauberste Lösung.
 

Deadalus

Bekanntes Mitglied
Naja allgemein wird das wohl eher ein Sonderfall sein. Ich denke auch das zum Beispiel die Umwandlung von Angestellten in Personen nie stattfinden wird.

Ich hätte nur gedacht, wenn Vererbung ein fester Bestandteil der JPA ist würden auch Methoden existieren um diese zu manipulieren. Meine Frage ist also eher theoretischer Natur.
 

tfa

Top Contributor
Aber dann müsste man ja auch ein Objekt von Klasse X in Klasse Y umwandeln können. Und das geht in einer streng-typisierten Sprache wie Java nicht.
 

Cage Hunter

Aktives Mitglied
Mapper liefern solch eine Funktionalität jedenfalls nicht, was Du jedoch tun könntest, wäre es einfach programmatisch umsetzen.
Du liest die Personen und Angestellten aus, speicherst das Zeug halt in nem Array oder so, löschst anschliessend alle aus der DB und erstellst einfach neue Objekte der jeweils sinngemäß umgekehrten Klasse und persistierst diese erneut. Du musst quasi nur dafür sorgen, dass die Werte dahin "gemapped" werden, wo sie hin sollen...manuelles Mapping macht doch Spass^^
Ne andere Möglichkeit fällt mir spontan nicht ein, aber ich glaub das müsste ganz gut gehen :)
 

Deadalus

Bekanntes Mitglied
Ich lösche jetzt tatsächlich das alte Objekt und erstelle ein neues mit den Werten des alten.

Natürlich Mappe ich diese Werte nicht von Hand für sowas gibt es ja schließlich dank der Apache Foundation

Java:
 PropertyUtils.copyProperties(dest, orig);
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben