2009-10-13 15 views
0

Система Я работаю над имеет объект домена с именем Order, который наследует от AbstractPersistentObject. Теперь мне нужно добавить еще один объект домена с именем ExternalOrder который имеет некоторые свойства заказа, но не все. Я бы хотел, чтобы эти два объекта обрабатывались полиморфически в определенных местах. Поэтому я думаю о реализации наследования.Hibernate Наследование Отображение и атрибутов Override

Я создал AbstractOrder, который в настоящее время проходит AbstractPersistentObject и перемещать общие свойства AbstractOrder. Order и ExternalOrder теперь расширяют AbstractOrder.

Поскольку в таблице заказов уже есть много данных в базе данных, я бы предпочел не делать слишком много изменений в схеме.

  1. Если я опустил InheritanceType.SINGLE_TABLE, какая стратегия наследования была бы лучше для меня? Я должен упомянуть, что я должен использовать OnetoMany, присоединиться хотя бы к одному объекту домена. Объект домена будет ссылаться на AbstractOrder, а Hibernate будет определять во время выполнения конкретный подкласс для этого AbstractOrder.

  2. AbstractPersistentObject имеет @Id и @GeneratedValue (strategy = GenerationType.IDENTITY) для идентификатора свойства. Есть ли способ переопределить это, когда я реализую наследование? Насколько я понимаю, GenerationType.IDENTITY не будет работать для определенных вариантов наследования, и я не уверен, как это переопределить. Я просмотрел @AttributeOverride, но я думаю, что это полезно, когда вы хотите переопределить некоторые значения @Column.

ответ

1

1) У вас действительно не так много вариантов здесь. Две другие стратегии сопоставления наследования: table per class, которые не будут работать для вас (так как это не поддерживает IDENTITY) и joined subclasses, что потребует от вас разделить таблицу «Заказы» на две части (AbstractOrder и Order) плюс добавить еще одну таблицу для ExternalOrder.

2) Вы не можете переопределить атрибуты на идентификаторе в иерархии наследования. Это также хорошо, однако стратегия «таблица за класс» определенно не идеальна.

Смежные вопросы