Подтвердить что ты не робот

Дискриминатор в 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 работает без определения столбца дискриминатора, но он довольно неэффективен, потому что тогда спящий режим должен создавать соединения между родительским и всеми дочерними элементами вместо одного родителя и одного ребенка при использовании информации в столбце дискриминатора.

4b9b3361

Ответ 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)?