Отображение Hibernate Inheritance и переопределение атрибутов - PullRequest
0 голосов
/ 13 октября 2009

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

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

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

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

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

1 Ответ

1 голос
/ 13 октября 2009

1) У вас не так уж много вариантов здесь. Две другие стратегии отображения наследования: таблица для класса , которая не будет работать для вас (так как она не поддерживает IDENTITY), и объединенные подклассы , которые потребуют от вас разделения ваших «заказов» таблицу на две части (AbstractOrder и Order) плюс добавьте еще одну таблицу для ExternalOrder.

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

...