20 Stimmen

Unterscheidungsmerkmal in InheritanceType.JOINED

Ist es möglich, Hibernate zu zwingen, Diskriminator-Spalte für Vererbung Typ verbunden verwenden? Nach JPA2.0 Spezifikation sollte dies möglich sein, aber ich kann es nicht in Hibernate erreichen.

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

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

Dadurch wird nicht einmal die Spalte TYPE in der Tabelle PARENT erstellt, wenn hibernate.hbm2ddl.auto create verwendet wird.

Ich weiß, dass InheritanceType.JOINED ohne die Definition einer Diskriminatorspalte funktioniert, aber es ist ziemlich ineffektiv, weil Hibernate dann Joins zwischen dem Elternteil und allen Kindern erstellen muss, anstatt nur zwischen dem Elternteil und einem Kind, wenn Informationen in der Diskriminatorspalte verwendet werden.

15voto

BadgerB Punkte 306

Ich habe die SINGLE_TABLE mit einem Diskriminator und einem SecondaryTable auf die Unterklasse, um genau das zu tun. D.H.

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

@Entity
@DiscriminatorValue("C")
@SecondaryTable(name = "child", pkJoinColumns = {@PrimaryKeyJoinColumn(name="id", referencedColumnName = "id")})
public class Child extends Parent

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

1voto

Jinesh Parekh Punkte 2121

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X