【发布时间】:2015-01-05 20:09:45
【问题描述】:
鉴于以下类和接口,我想知道 JPa 如何处理它:
public interface Operator{
public String getOperator();
}
让我们留下来,然后我有这个类的两个实现:
public class PlusOperation implements Operator, Serializable {
public String getOperator(){
return "+";
}
}
还有:
public class MinusOperation implements Operator, Serializable {
public String getOperator(){
return "-";
}
}
存在一个标记为@Entity 的类,它有一个属性Operator:
@Entity
public class Function {
@Id @GeneratedValue
private Long id;
private Operator operator;
// Other methods & properties omitted for clarity
}
因此,在 Function 类中,它可以包含 PlusOperation 或 MinusOperation 并且这些类都没有使用 @Entity 注释,因为它们没有任何需要持久化的属性,但它们各自不同。 JPA 如何处理这个问题?当持久化 Function 对象时,它是否会自动(并在“幕后”)使用正确的 Operation 实现标记 operator 属性?
【问题讨论】:
-
实体是一种存储数据的方式。不是一种存储行为的方式。这完全是对 ORM 的滥用。不要。
-
无论如何这都行不通,因为持久化操作符的唯一方法是序列化它,它不是可序列化的。
-
鲍里斯,我同意,但这就是我必须解决的问题,所以问题仍然存在。 JB Nizet 我也实现了 Serializable 接口。
-
在这种情况下只需阅读文档即可。这取决于继承模式的类型,但本质上特定的子类存储在表中并创建了正确的类型。例如,阅读Hibernate documentation 了解更多信息。