2010-11-25 8 views
18

Ist es möglich, Hibernate zu zwingen, discriminator Spalte für Vererbung Typ verbunden zu verwenden? Laut JPA2.0 Spezifikation sollte dies möglich sein, aber ich kann es nicht im Ruhezustand erreichen.Discriminator in InheritanceType.JOINED

Beispiel:

@Inheritance(strategy = InheritanceType.JOINED) 
@ForceDiscriminator 
@DiscriminatorColumn(name="TYPE") 
@Entity 
public class Parent 

@Entity 
@DiscriminatorValue("C") 
public class Child extends Parent 

Dies auch nicht Spalte TYPE in der Tabelle ELTERN erstellen, wenn hibernate.hbm2ddl.auto zu erstellen verwenden.

Ich weiß, dass InheritanceType.JOINED funktioniert, ohne discriminator Spalte zu definieren, aber es ist ziemlich ineffektiv, da Hibernate Joins zwischen Eltern und allen Kindern erstellen muss, anstatt nur Eltern und ein Kind, wenn Informationen in discriminator Spalte verwenden.

+1

Nach weiterer Suche sieht es nicht Supporter von Hibernate Annotationen: http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 – milbr

Antwort

1

Möchten Sie @Inheritance (strategie = InheritanceType.SINGLE_TABLE) verwenden?

+0

Nein, ich möchte nicht, normalisierte Schema in der Datenbank haben . Mit InheritanceType.SINGLE_TABLE, wenn Sie ein Kind hinzufügen, müssen Sie die Struktur der Elterntabelle ändern (einige Spalten hinzufügen), die ich vermeiden möchte. – milbr

+1

Eine Diskriminatorspalte für verknüpfte Vererbung wird von dem, an das ich mich erinnere, nicht unterstützt. Lass mich den Winterschlaf für dich googeln. –

+0

Los geht's: http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 –

12

Ich habe SINGLE_TABLE mit einem Diskriminator und SecondaryTable auf der Unterklasse verwendet, um genau dies zu tun. I.E.

Wenn Sie eine neue Unterklasse hinzufügen, fügen Sie eine neue Tabelle mit den entsprechenden erweiterten Datenfeldern hinzu.

+4

Das scheint mir nicht irrelevant. – jhericks

Verwandte Themen