【问题标题】:Extending Embeddable class in JPA在 JPA 中扩展 Embeddable 类
【发布时间】:2012-01-09 08:24:57
【问题描述】:

我有一个从另一个可嵌入类 XYZ 扩展而来的可嵌入类 ABC。 ABC 的对象嵌入在一个实体中。与实体对应的表仅包含 ABC 的元素,而不包含 XYZ 的元素。我应该怎么做才能得到它们?

我听说描述符定制器可以工作。我该怎么做?有没有其他办法?

【问题讨论】:

  • 错误,将需要的列添加到表中。如果 ABC 扩展了 XYZ,则它是一个 XYZ,因此 XYZ 的所有字段在表中都是必需的。如果它们不是必需的,那么您不应该让 ABC 扩展 XYZ。
  • ABC 不是唯一扩展 XYZ 的类
  • 那又怎样?我的观点仍然存在。如果您对其他扩展类也有同样的问题,那么它们也不应该扩展 XYZ。
  • JPA 没有提到对继承的嵌入对象的支持;需要一个鉴别器来提供这样的功能。最近被添加到 JDO 规范中。

标签: jpa eclipselink embeddable


【解决方案1】:

This document of oracle javaEE 可能会对您有所帮助。据此, InheritanceType.SINGLE_TABLE 是默认策略。您可能需要 InheritanceType.TABLE_PER_CLASS 来满足您的要求。

它已在 Entity Inheritance Mapping Strategies 主题中进行了描述,但我相信它也可能适用于“可嵌入”。

【讨论】:

    【解决方案2】:

    您需要在 DescriptorCustomizer 中为 XYZ 设置 InheritancePolicy classIndicatorField。然后你需要为扩展 XYZ 的 ABC 定义聚合描述符,你可能需要一个 SessionCustomizer。

    【讨论】:

      【解决方案3】:

      有人可以举例说明如何编写这个 DescriptorCustomizer 吗? 我有同样的事情,我的 XYZ 类有一堆字符串和 uid。 我无法让具有嵌入式 ABC 的对象显示来自 XYZ 的字段。 (我能做到的唯一方法是将所有 XYZ 字段的吸气剂放在 ABC 中,这不好)

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 1970-01-01
        • 2020-10-17
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        相关资源
        最近更新 更多