Дискриминатор в InheritanceType.JOINED - PullRequest
19 голосов
/ 25 ноября 2010

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

Ответы [ 2 ]

14 голосов
/ 17 октября 2011

Я использовал SINGLE_TABLE с Дискриминатором и SecondaryTable на подклассе, чтобы сделать эту самую вещь.IE

@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

Когда вы добавляете новый подкласс, вы добавляете новую таблицу с соответствующими полями расширенных данных в ней.

1 голос
/ 25 ноября 2010

Хотите использовать @Inheritance (стратегии = InheritanceType.SINGLE_TABLE)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...