gpt4 book ai didi

java - 是否可以持久化对象的类?

转载 作者:行者123 更新时间:2023-12-01 23:23:52 24 4
gpt4 key购买 nike

我已经创建了一个实体类和我希望成为对象的的字段之一,即我不希望(并且不能)持续存在该领域的具体对象。例如,我创建了一个抽象类,它是我想要保留的所有后代的:

public abstract class RootType implements Serializable {
private String name;
private Date date;

public void setName(String name){
this.name = name;
}

public void setDate(Date date) {
this.date = date;
}

public String getName(){
return name;
}

public Date getDate(){
return date;
}
}

以及RootType的两个后代:

public class FloatData extends RootType {
Float data;

public void setData(Float data){
this.data = data;
}

public Float getData(){
return data;
}
}

public class StringData extends RootType {
String data;

public void setData(String data){
this.data = data;
}

public String getData(){
return data;
}
}

以及引用 RootType 或其后代之一的实际实体类:

@Entity
public class Customer implements Serializable {
@Id
@GeneratedValue
private Long id;
private Class c;

// standard methods omitted for clarity
public void setC(Class c){
this.c = c;
}

public Class getC(){
return c;
}
}

我的问题是:

  1. 这是实现这一目标的有效方法吗?
  2. 如果有效,它是否将最少的数据放入有关该类的数据库中,即只是对其进行某种引用?
  3. 有没有办法将类限制为 RootType.class 类型,或者每个客户实体的 c 字段都是 RootType.class即使它实际上是后代?

我可以使用枚举类型,但这会立即限制我在编译时声明我可以拥有什么.class,我宁愿避免这种情况。

最佳答案

为什么不将其更改为String:

public class Customer implements Serializable {
...
private String c;
...
}

要存储它,你会这样做:

customer.setC(clazz.getName());

并将其作为 Class 返回,您可以这样做:

Class<?> clazz = Class.forName(customer.getC());

关于java - 是否可以持久化对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com