【发布时间】:2011-11-19 14:29:24
【问题描述】:
在我们的系统中,我们存储订单。我们的项目中总是有客户特定的代码,但我们会尽可能地标准化。现在我正在使用 Hibernate 进行测试,看看我们是否可以使用它来改进我们的数据访问对象。我在理解 Hibernate 继承的可能性时遇到了一些问题。让我概述一下这个问题:
我们有 4 层软件:
- 核心库
- 客户特定库(核心扩展)
- 应用程序(使用核心库和客户特定库的应用程序)
- 数据库
核心库
在核心库中,我们有以下关于订单的模型
- IOorder(接口)
- 顺序(类、核心顺序实现、默认实现)
假设订单具有以下默认字段:
- 身份证
- CUSTOMER_NAME
- 订单日期
- 交货日期
客户特定库
在客户特定的库中,我们有以下关于订单的内容:
- CustomerOrder(类,订单扩展)。
现在订购我们系统的客户除了上述字段外,还希望存储国家和优先级。客户特定字段为:
- 国家
- 优先级
应用
应用程序通过工厂加载正确的 Order 类(Order 或 CustomerOrder)。工厂以某种方式知道是否有客户特定的实施。
数据库
在 de 数据库中,我们希望有 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 仅使用 1 个表在 Java 中对此进行建模。核心 Order 实体不知道 CustomerOrder 中可用的任何额外列。我结合继承研究了 Hibernate 的一些选项,例如使用策略 InheritanceType.SINGLE_TABLE。但我相信这需要一个鉴别器列,而我没有。
Hibernate 有哪些选择?
【问题讨论】:
-
嗨长袍。您是直接使用 Hibernate,还是通过 JPA?
标签: java hibernate inheritance orm