java - JPA 关系和多态性

标签 java jpa polymorphism

我有以下类结构(为清楚起见省略了细节):

例如:

@Entity
class A{

@OneToMany
private List<B> b;

@OneToOne
private C c;


}

interface B {

}

@Entity
@Inheritance
abstract class Babstract implements B {

}

@Entity
@PrimaryKeyJoinColumn
class B1impl extends Babstract  {

}

@Entity
@PrimaryKeyJoinColumn
class B2Impl extends Babstract {

}

我想加载属于 C 的所有 B。A 类将 B 与 C 相关联。B 和 C 不知道彼此的存在,我喜欢保持这种状态。我不知道 B 的实际实现类型,我也不在乎,因为我使用抽象数据类型 B(接口(interface))。实现可能会随着时间的推移而变化,例如,B 的新实现可能会在未来的新版本中添加。

JPA 可以做到这一点吗?我该怎么做?如果我是正确的,我不能使用 targetEntity 属性,因为我不知道实现类而且我不在乎。 B是多态。

最佳答案

JPA 不能很好地与接口(interface)一起工作。您需要使 B 至少成为带有实体注释的抽象类。您可以使 B 成为一个完全空的抽象类(除了 id 字段,您需要它)然后添加继承。这样做的原因是,为了让一个实体引用另一个实体,必须有一种方法可以在数据库中引用该实体——如果没有 B 的表,那么就没有办法做到这一点。

关于java - JPA 关系和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193676/

相关文章:

c - 取决于调试级别的函数多态性

java - 该对象是哪个扩展类?

java - 打印成物理形式——需要基本的理解

jsf - 在泛型类中注入(inject)时 CDI 不工作 - Java

java - 交易在 Jetty 中不及时持久化

java - 为什么我们在 Java 中使用接口(interface)引用类型?

java - 从 EPSG :4326 to EPSG:31467 in Java/GWT server side 转换坐标

java - 在java中创建一个包含10个唯一数字的数组

java - 解析多态子类属性jpa hibernate查询的标准

C++ 纯虚void