Zuordnen mehrerer Unterklassen zu derselben übergeordneten ID in JPA Joined InheritanceJava

Java-Forum
Anonymous
 Zuordnen mehrerer Unterklassen zu derselben übergeordneten ID in JPA Joined Inheritance

Post by Anonymous »

Ich habe in meiner Datenbank die Tabellen Person, PersonExtra, PersonBasic usw. mit der Oberklasse Person und den Unterklassen PersonExtra und PersonBasic erstellt.

Code: Select all

@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
@Id
@Column(name = "id", nullable = false, unique = true, length = 20)
private String id;
private String name;
private String lastname;
// ...
}

Code: Select all

@Entity
@PrimaryKeyJoinColumn(name = "extra_id")
public class PersonExtra extends Person {
private String code;
private String subject;
// ...
}

Code: Select all

@Entity
@PrimaryKeyJoinColumn(name = "basic_id")
public class PersonBasic extends Person {
private String range;
}
Wenn ich zuerst eine Person erstelle und dann versuche, ein PersonExtra mit der ID einer vorhandenen Person zu erstellen, erhalte ich einen Fehler wegen doppelter ID, da versucht wird, sowohl Person als auch PersonExtra beizubehalten. Es scheint, als ob eine Person nur einen eindeutigen Typ haben und nur über die Unterklasse erstellt werden kann.
  • Ich möchte, dass eine Person gleichzeitig PersonExtra und PersonBasic sein kann.
Als ich die Datenbank modellierte, schien es besser zu sein. Ich hatte die Idee, so etwas wie Vererbung in der Datenbank zu verwenden, was einfacher abzubilden sein könnte.
Wie kann ich meine JPA-Entitäten so strukturieren, dass verschiedene Unterklassen (PersonExtra und PersonBasic) mit derselben ID wie die Oberklasse (Person) erstellt werden können?
  • Ich dachte, dass ich vielleicht Eins-zu-Eins-Beziehungen wie Person mit erstellen könnte PersonExtra und Person mit PersonBasic könnten funktionieren.

    Mir gefiel die Idee, hier Vererbung zu haben, aber es scheint, dass dies in dieser Situation nicht möglich ist?
  • Ich habe über die Verwendung der MappedSuperclass-Annotation nachgedacht, aber ist das nicht nur für eine abstrakte Klasse, wenn die Entität nicht in der Datenbank erstellt wird?
  • Oder sollte ich vielleicht die Datenbank ändern und eine Eins-zu-viele-Beziehung mit Rollen erstellen? Ein Teil von mir denkt, dass ein Teil der Datenbanksemantik verloren gehen könnte und die spätere Implementierung der Logik kompliziert werden könnte.
Ich bin neu in diesem Bereich und könnte mich in all dem irren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post