Hibernate - какую стратегию наследования следует использовать для класса, который не является абстрактным, но подклассам могут не понадобиться таблицы - PullRequest
0 голосов
/ 31 марта 2011

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

Кажется, я не могу найти прямого ответа относительно погоды, в которой суперкласс может иметь абстрактный класс со стратегией JOINED.

Я подозреваю, что число подклассов не станет слишком большим, и ни у одного из них не должно быть много дополнительных данных, поэтому, возможно, достаточно SINGLE_TABLE.

Я действительно не хочу иметь дополнительные таблицы без причины, поэтому TABLE_PER_CLASS неуместно.

Буду признателен за любые указания.

Спасибо

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Если подклассам не нужны таблицы, я почти всегда просто использую подход с одной таблицей для наследования.Если по какой-то причине один из подклассов, которым действительно нужна таблица, имеет какое-то нелепое количество дополнительных полей (скажем, 10+), дополнительные данные могут указывать на то, что вам нужно создать отдельные таблицы для одних подклассов и плоские таблицы для других.1001 *

Как это будет отображаться в спящем режиме, я не уверен, но я думаю, что это разумный способ смоделировать его.

0 голосов
/ 18 июля 2013

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

Используйте стратегию SingleTable, и если у вас в одном из подклассов больше полей и требуется отдельная таблица,пометьте этот подкласс как SecondaryTable, используя аннотацию @SecondaryTable, и используйте PrimaryKeyJoin (для этого есть аннотация), чтобы присоединиться к суперклассу в столбце pk.Кроме того, все поля в подклассе должны быть явно отображены в параметре secondTable с использованием атрибута 'table' в аннотации @column.

...