java - JPA中的Id继承

标签 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;
}

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

最佳答案

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

参见 this question了解详情。

要解决此限制,您可以:

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

关于java - JPA中的Id继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378973/

相关文章:

java - 在JPA中,有没有办法批量将数据插入数据库,并且仅在数据库中不存在时插入

java - Hibernate:哪个更好:在多对一关联中保存源或目标

java - 找不到主类 Java

java - 如何在其字段之一中检索具有最大值的文档 Mongodb

c++ - 继承公共(public)/ protected /私有(private)构造函数

c++ - 将继承的方法传递给另一个方法

java - 转换为 JSon 或任何 java map 类型

java - 如果在属性文件中找不到属性,则打印系统属性名称

PHP:覆盖静态方法无法按预期工作

java - 动态 JPA 查询不起作用