Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA中的Id继承_Java_Inheritance_Jpa - Fatal编程技术网

Java JPA中的Id继承

Java JPA中的Id继承,java,inheritance,jpa,Java,Inheritance,Jpa,我有以下计划 @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; } @实体 公共A类 { @身份证 字符串字段1 字符串字段

我有以下计划

@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;
}
@实体
公共A类
{
@身份证
字符串字段1
字符串字段2
}
公共类B扩展了A
{
字符串字段3;
@OneToMany(MappedBy=“b”)
列表cList;
}
公共类C扩展了
{
字符串字段4;
@许多酮
B B;
}
类B和C都扩展了A,并根据具体的类策略从使用表中获取它们的id,但问题是类B与类C有一对多的关系,所以我想要将类C的id更改为一个复合键,由继承的id字段1和对象B的id组成。这将允许b的两个不同对象具有相同field1值的两个不同c对象。
是我认为可能的(覆盖继承)我使用eclipse链接作为持久性提供者。

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

有关详细信息,请参阅

要解决此限制,您可以:

  • 从层次结构中“分离”
    C
    ,使其不会从
    A
  • C
    用作其他实体中的属性

但是有一个共同的功能可以由B、C完成。我有返回B和C的查询。这样做会增加管理这两个对象的开销(使两个查找、两个持久化、两个查询…)@user3041392-是的,这是一个技术限制,恐怕没有漂亮的解决方案。很抱歉对象层次结构和关系数据库并不总是很好。谢谢@kostja,是否可以使B同时扩展C和B具有多个C。@user3041392-是的,同一层次结构中的实体之间的关系是合法的。你可以像正常的关系一样使用它们。