Java 持久化没有属性的实现
考虑到以下类和接口,我想知道JPa是如何处理的:Java 持久化没有属性的实现,java,jpa,entity,Java,Jpa,Entity,考虑到以下类和接口,我想知道JPa是如何处理的: public interface Operator{ public String getOperator(); } 让我们留下来,然后我有两个此类的实现: public class PlusOperation implements Operator, Serializable { public String getOperator(){ return "+"; } } 以及: 存在一个标记为@Entit
public interface Operator{
public String getOperator();
}
让我们留下来,然后我有两个此类的实现:
public class PlusOperation implements Operator, Serializable {
public String getOperator(){
return "+";
}
}
以及:
存在一个标记为@Entity
的类,该类具有一个属性运算符
:
@Entity
public class Function {
@Id @GeneratedValue
private Long id;
private Operator operator;
// Other methods & properties omitted for clarity
}
因此,在函数类中,它可以包含
PlusOperation
或MinusOperation
,并且这两个类都没有使用@Entity
进行注释,因为它们没有任何需要持久化的属性,但它们各自不同。JPA如何处理这个问题?当持久化一个函数
对象时,它会自动(和“幕后”)用正确的操作
实现标记操作符
属性吗?只需添加一个JPA AttributeConverter,将“operator”字段存储为字符串或整数。这样一来,其他类型(不是实体)是否没有自己的属性就无关紧要了。然后,转换器负责决定什么是持久化的,以及如何检索它。实体是存储数据的一种方式。不是一种储存行为的方式。这完全是对ORM的滥用。不要这样做。那无论如何都不行,因为唯一能持久化操作符的方法是序列化它,而且它是不可序列化的。Boris,我同意,但这就是我要处理的,所以问题仍然存在。此外,我还实现了可序列化接口。请阅读这种情况下的文档。这取决于继承模式的类型,但本质上特定的子类存储在表中,并创建正确的类型。有关更多信息,请阅读,例如。
@Entity
public class Function {
@Id @GeneratedValue
private Long id;
private Operator operator;
// Other methods & properties omitted for clarity
}