в нашей системе мы храним заказы.У нас всегда есть специфический для клиента код в наших проектах, но мы стараемся максимально стандартизировать.Сейчас я настраиваю тест с Hibernate, чтобы посмотреть, сможем ли мы использовать его для улучшения наших объектов доступа к данным.У меня есть некоторые проблемы с пониманием возможностей наследования в Hibernate.Позвольте мне изложить проблему:
У нас есть 4 уровня программного обеспечения:
- базовая библиотека
- библиотека для конкретного клиента (расширения на ядре)
- приложение (приложение, использующее как основную, так и специфичную для клиента библиотеку)
- база данных
базовая библиотека
В базовой библиотеке имеется следующая модель в отношении заказов
- IOrder (интерфейс)
- Порядок (класс, реализация основного порядка, реализация по умолчанию)
Предположим, что в Ордере есть следующие поля по умолчанию:
- ID
- CUSTOMER_NAME
- ORDER_DATE
- DELIVERY_DATE
Библиотека, специфичная для клиента
В библиотеке, специфичной для клиентаУ нас есть следующее в отношении заказа:
- CustomerOrder (класс, расширение для заказа).
Теперь клиент, заказывающий нашу систему, также хочет сохранить страну и приоритет дополнительнок вышеуказанным полям.Специфичные для клиента поля:
Приложение
Приложение загружает правильный класс Заказа (либо Заказили CustomerOrder) через фабрику.Фабрика каким-то образом знает, есть ли конкретная реализация для клиента.
База данных
В базе данных мы хотели бы иметь 1 таблицу (из соображений производительности), нашу таблицу ядра / таблицы по умолчанию (поэтому без каких-либорасширение клиента) выглядит следующим образом:
create table ORDER
(
OR_ID VARCHAR2(10) not null constraint OR_ID_PK primary key,
OR_CUSTOMER_NAME VARCHAR2(20),
OR_ORDER_DATE datetime,
OR_DELIVERY_DATE datetime
);
Для клиента, которому требуются дополнительные два поля, мы создали бы такую же таблицу:
create table ORDER
(
OR_ID VARCHAR2(10) not null constraint OR_ID_PK primary key,
OR_CUSTOMER_NAME VARCHAR2(20),
OR_ORDER_DATE datetime,
OR_DELIVERY_DATE datetime,
OR_COUNTRY VARCHAR2(20),
OR_PRIORITY NUMBER
);
Java / Hibernate
Теперь моя проблема в том, как я могу смоделировать это в Java, используя Hibernate, используя только 1 таблицу.Базовая сущность Order не знает ни о каких дополнительных столбцах, доступных в CustomerOrder.Я исследовал некоторые варианты Hibernate в сочетании с наследованием, например, используя стратегию InheritanceType.SINGLE_TABLE.Но я считаю, что для этого требуется столбец дискриминатора, которого у меня нет.
Какие у меня есть варианты с Hibernate?