Hibernate:每个具体类映射表&引用

时间:2013-06-12 09:55:45

标签: hibernate class reference concrete

我指的是每个具体类的表格,如下所述:Table per concrete class

按照9.1.6中的示例,假设我有CashPayment,CreditCardPayment,两者的超类都是抽象付款类。

如果我使用“每个具体类的表”类型的映射,我将有两个表:CASH_PAYMENT和CREDIT_PAYMENT,并且没有PAYMENT表。这一切都很好。

但是,如何构建另一个名为Xyz的实体类型,其中包含付款的参考/属性(现金或CC)......?从Java的角度来看,没关系:Xyz.pamentType,但是如何在HBM /注释中配置它,以及XYZ表的外观是什么?

它可能有一个PAYMENT_ID列,但显然它不能是外键,因为有两个可能引用的表。我猜XYZ需要某种类型的附加栏来说明它是哪种类型的付款。

或者Hibernate会在每次读取Xyz实例时使用ID连接两个表来查找正确的类型吗?

顺便说一句,我知道这是一个糟糕的方法,我可以使用更简单的替代方案,但我已经简化了问题,因为答案(而不是替代方案)对我有用。谢谢!

1 个答案:

答案 0 :(得分:0)

无需配置任何内容,只需创建与付款的关系,例如:

@OneToOne private Payment payment;

然后为其赋值并持久化。

没有其他列用于查找付款类型。确定付款休眠的类型

  • 结盟
    • 查询到CashPayment的结果
    • 对CreditCardPayment表的查询结果。
  • 这些select语句在select列表中包含表示类型的附加项。
  • 外部选择从嵌套查询中获取值(联合的结果)。附加属性确定在创建付款实例时将使用哪个具体类。