java - 在 Java 中使用 ORM 处理与接口(interface)的关联

标签 java orm associations

我想知道是否可以在另一个实体中处理与抽象 实体(即接口(interface))的关联。例如:
我有一个名为 Fooclass,它有一个 bar 属性,属于 Bar 类型,它是一个 接口(interface)。多个类(Bar1Bar2)实现了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 时,它的 barBar 实现之一的实例。

最佳答案

是的,您可以支持多态关联,但是您需要使 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/

相关文章:

select - Mybatis 关联/集合的嵌套选择不起作用

java - 为什么在java中入队时必须使用(rear+1)%capacity?

java - hibernate 中不区分大小写的搜索

python - 有什么理由不使用 SQLObject 而不是 SQLAlchemy?

java - hibernate 异常 : Couldn't obtain transaction-synchronized Session for current thread

javascript - 建立关联时,哪些方法/mixin sequelize 添加到模型中?

database - 我可以在 UML 中建立两个关联类之间的关系吗?

java - 我使用十进制格式并将舍入模式设置为向下

java - 查找存储在arraylist中的字符的索引值

java - Simplexml 列表不起作用