Столбец MultiDiscriminator в иерархии наследования Hibernate - PullRequest
0 голосов
/ 27 марта 2012

У меня есть такая структура:

абстрактный класс Aабстрактный класс B расширяет Aабстрактный класс C расширяет B

Это моё настоящее отображение:</p> <pre><code>@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @Table(name = "TAB_A") @DiscriminatorColumn(name="DISCRIMINATOR_A", discriminatorType=DiscriminatorType.STRING) public abstract class A { } @Entity @DiscriminatorValue("VALUE") @SecondaryTable(name = "TAB_B", pkJoinColumns = {@PrimaryKeyJoinColumn(name="ID_A")}) @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING) public abstract class B extends A { } @Entity @DiscriminatorValue("VALUEB") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public abstract class C extends B { }

У меня есть столбец дикриминатора между A и B, который является дискриминатором A.У меня есть столбец дикриминатора между B и C, который является дискриминатором B.

Наследование между A и B работает.Наследование между B и C не работает.Я прочитал этот пункт:

11.1.10 Аннотация DiscriminatorColumn

Для стратегии отображения SINGLE_TABLE и, как правило, также для стратегии JOINED, поставщик сохраняемости будет использовать столбец дискриминатора типа.Аннотация DiscriminatorColumn используется для определения столбца дискриминатора для стратегий отображения наследования SINGLE_TABLE и JOINED.

Стратегия и столбец дискриминатора указываются только в корне иерархии или подчиненной иерархии классов сущностей, в которой другая стратегия наследования

Кто-нибудь имеет представление о том, как сделать это отображение?

Спасибо.

1 Ответ

0 голосов
/ 27 марта 2012

Удалить это:

@DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING)

Достаточно иметь один раз столбец дискриминатора на иерархию. Все объекты в этой иерархии будут иметь строку в TAB_A (определенную в объекте A). Этого также достаточно, если вы используете объединенную стратегию наследования (несколько таблиц).

Другие проблемы с вашими отображениями:

  • A является корнем вашей иерархии сущностей, использование @ Inheritance в B и C не требуется.
  • @ DiscriminatorValue должен быть помещен в конкретные объекты, B и C. абстрактные.
...