我想知道是否可以在另一个实体中处理与抽象 实体(即接口(interface))的关联。例如:
我有一个名为 Foo
的 class
,它有一个 bar
属性,属于 Bar
类型,它是一个 接口(interface)
。多个类(Bar1
、Bar2
)实现了Bar
并且都也持久化。
class Foo{
Bar bar; // this will be either Bar1 or Bar2
}
interface Bar{
// some methods
}
class Bar1 implements Bar{
String s; // Bar1 and Bar2 have different represantations ,hence they must be persisted to different tables
}
class Bar2 implements Bar{
int i;
}
现在我如何使用 Java 中的 ORM 来处理这个问题?即:当我检索到 Foo
时,它的 bar
是 Bar
实现之一的实例。
最佳答案
是的,您可以支持多态关联,但是您需要使 Bar
成为 abstract
base @Entity
类而不是 interface
,因为 JPA 不能很好地与接口(interface)一起工作,例如:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Bar {
...
}
@Entity
public class Bar1 extends Bar {
private String s;
...
}
@Entity
public class Bar2 extends Bar {
private int i;
...
}
如果您以这种方式建模,您将能够使用 JP-QL 以多态方式查询 Bar
实例,例如从 Bar 中选择 b
。
引用:
https://docs.oracle.com/javaee/7/tutorial/persistence-intro002.htm#BNBQN
关于java - 在 Java 中使用 ORM 处理与接口(interface)的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38116298/