2017-06-19 1 views
0

nehme ich die folgende Situation zwischen einer übergeordneten Klasse und Kind Klasse habe:Erstellen von Composite-Primärschlüssel in der Kinderklasse (JPA)

Class Parent { 
    @Id 
    @Column(name="product") 
    Long product; 

    //more fields. 
} 

Class Child extends Parent { 
    @Column(name="type") 
    String productType; 

    @Column(name="version") 
    int version; 

    //more fields. 
} 

Ist es möglich, einen Verbundprimärschlüssel in der Kinderklasse zu haben, obwohl Die Child-Klasse erweitert die Parent, die bereits einen Primärschlüssel hat?

+1

wahrscheinlich hängt von der Vererbungsstrategie ab, im Grunde für Ihren Anwendungsfall benötigen Sie mindestens 'Tabelle pro Klasse' Strategie, weil eine Tabelle nicht zwei Primärschlüssel haben kann, ich weiß nicht, was Sie neben diesem benötigen, haben Sie versucht '@Inheritance (strategie = InheritanceType.TABLE_PER_CLASS)' und dann andere '@ Id' in Kindern einstellen (Achtung: Tabelle pro Klasse ist möglicherweise nicht die beste Effizienz) – niceman

+0

Wenn Sie Ihr wirkliches Ziel beschreiben, wie zum Beispiel 'Eltern' und 'Kind' und warum brauchen Sie für das Kind einen anderen Primärschlüssel? Vielleicht können wir Sie zu einer besseren Lösung führen – niceman

+0

@niceman Vielen Dank für Ihre sehr schnelle Antwort. Ich habe die Strategie '@Inheritance (strategie = InheritanceType.TABLE_PER_CLASS)' nicht ausprobiert. Ich werde das untersuchen. Vielen Dank. – fonji

Antwort

1

Die kurze Antwort ist nein. In JPA können Primärschlüssel nicht neu definiert werden. Wenn Ihre Elternklasse eine @ ID-Annotation hat, würde keine Unterklasse @ ID-Annotationen ungeachtet der Vererbungsstrategie zulassen.

Die längere Antwort ist, dass wenn Sie so etwas tun müssen, sollten Sie Ihre Objekt-Mapping und Ihre Vererbungsstrategie neu denken. Wenn Sie einen Elternteil haben, der bereits über eine eindeutige Gruppe von Feldern verfügt, warum suchen Sie ein Kind, das diese Konvention bricht? Und selbst wenn Sie Erfolg haben, ist das eine sichere Sache für Sie in Bezug auf Architektur und Code-Klarheit?

+0

danke für Ihre schnelle Antwort. Ich werde die Objekt-Mapping- und Vererbungs-Strategie überdenken. – fonji

Verwandte Themen