1

我指的是每个具体类的表,如下所述:每个具体类的表

按照 9.1.6 中的示例,假设我有 CashPayment、CreditCardPayment,两者的超类是一个抽象的Payment 类。

如果我使用“每个具体类的表”类型的映射,我将有两个表:CASH_PAYMENT 和 CREDIT_PAYMENT,并且没有 PAYMENT 表。没关系。

但是,如何构建另一个名为 Xyz 的实体类型,其中包含对付款(现金或抄送)的引用/属性...?从 Java 的角度来看,这没问题:Xyz.pamentType,但是我如何在 HBM/annotations 中配置它,XYZ 表会是什么样子?

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

或者每次我读取 Xyz 的实例时,Hibernate 是否会使用 ID 连接两个表以找到正确的类型?

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

4

1 回答 1

0

没有什么可配置的,只需创建与 Payment 的关系,例如:

@OneToOne private Payment payment;

然后给它赋值并持久化它们。

没有额外的列用于找出付款的类型。确定支付休眠的类型

  • 使联合
    • CashPayment的查询结果
    • CreditCardPayment 表的查询结果。
  • 这些选择语句在选择列表中包含表示类型的附加项目。
  • 外部选择从嵌套查询中获取值(联合的结果)。附加属性确定在创建 Payment 实例时将使用哪个具体类。
于 2013-06-12T10:40:47.600 回答