Отображение Hibernate Inheritance и переопределение атрибутов

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

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

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

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

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

13.10.2009 04:24:14
1 ОТВЕТ
РЕШЕНИЕ

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

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

2
13.10.2009 05:29:04