【问题标题】:Id inheritance in JPAJPA中的ID继承
【发布时间】:2013-12-04 15:12:06
【问题描述】:

我有以下方案

@Entity
public class A

{
@Id
String field1
String field2
}
public class B extends A
{
 String field3;
 @OneToMany(MappedBy="b")
 List<C> cList;
}

public class C extends A
{
String field4;
@ManyToOne
B b;
}

B 类和 C 类都扩展 A 并使用每个具体类策略的表从 A 获取它们的 id,但问题是 B 类与 C 类具有一对多关系,所以我想要将 C 类的 id 更改为是一个复合键,由继承的 id field1 和对象 b 的 id 组成。这将允许 b 的两个不同对象具有 c 的两个不同对象具有相同的 field1 值。 我正在使用 Eclipse 链接作为持久性提供程序,我认为可能吗(覆盖继承)。

【问题讨论】:

    标签: java inheritance jpa


    【解决方案1】:

    不幸的是,JPA 继承策略不支持在实体层次结构中具有不同的 Id 类型,因为它会引入歧义。

    详情请参阅this question

    要解决此限制,您可以:

    • 从层次结构中'分离'C,这样它就不会派生自A
    • 使用C 作为不同实体中的属性

    【讨论】:

    • 但是有一个通用的功能可以由 B, C 完成。而且我有返回 B 和 C 的查询。
    • 这样做会增加管理这两个对象的开销(两个查找,两个持久化,两个查询......)
    • @user3041392 - 是的,这是一个技术限制,恐怕没有漂亮的解决方案。对不起。对象层次结构和 RDBMS 并不总是很好。
    • 感谢@kostja,是否可以让 B 扩展 C 并且 b 同时拥有多个 C。
    • @user3041392 - 是的,同一层次结构中的实体之间的关系是合法的。您可以像使用普通关系一样使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2011-08-20
    • 2011-09-04
    • 2014-10-30
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多