Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持久化没有属性的实现_Java_Jpa_Entity - Fatal编程技术网

Java 持久化没有属性的实现

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

考虑到以下类和接口,我想知道JPa是如何处理的:

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
}