Дискриминатор в InheritanceType.JOINED
Можно ли заставить hibernate использовать столбец дискриминатора для присоединенного типа наследования?
Согласно спецификации JPA2.0 это должно быть возможно, но я не могу добиться этого в спящем режиме.
Пример:
@Inheritance(strategy = InheritanceType.JOINED)
@ForceDiscriminator
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent
@Entity
@DiscriminatorValue("C")
public class Child extends Parent
Это даже не создает столбец TYPE в таблице PARENT при использовании hibernate.hbm2ddl.auto create.
Я знаю, что InheritanceType.JOINED работает без определения столбца дискриминатора, но он довольно неэффективен, потому что тогда спящий режим должен создавать соединения между родительским и всеми дочерними элементами вместо одного родителя и одного ребенка при использовании информации в столбце дискриминатора.
Ответы
Ответ 1
Я использовал SINGLE_TABLE
с дискриминатором и SecondaryTable
в подклассе, чтобы сделать это. И.Е.
@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
Когда вы добавляете новый подкласс, вы добавляете в него новую таблицу с соответствующими расширенными полями данных.
Ответ 2
Вы хотите использовать @Inheritance (strategy = InheritanceType.SINGLE_TABLE)?