![](/img/trans.png)
[英]In hibernate, is it possible to persist an object in the constructor?
[英]Is it possible to persist the Class of an object?
我創建了一個Entity類,並創建了一個我想成為對象類的字段,即我不希望( 也不能 )將一個具體對象保留在該字段中。 例如,我創建並抽象了一個類 ,它是我想保留的所有后代的類 :
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;
}
}
實際的Entity類具有對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;
}
}
我的問題是:
RootType.class
類型,或者每個 Customer實體的c字段都是RootType.class
即使它實際上是后代? 我可以使用Enum類型,但是立即將其限制為在編譯時說明我可以擁有的.class
而我寧願避免這種情況。
為什么不將其更改為String
:
public class Customer implements Serializable {
...
private String c;
...
}
要存儲它,您可以:
customer.setC(clazz.getName());
並將其作為Class
收回:
Class<?> clazz = Class.forName(customer.getC());
1.是的,這是有效的,盡管您需要使用@Lob注釋c
字段
2.Well,我懷疑只有很少的數據可以保留,但是您可以自己檢查一下。 此外,最大的問題是,如果您堅持這樣的課程,然后再更改您的課程並重新部署,則會遇到一些無法實現的問題。 這就是為什么我建議您保存該類的Class.getSimpleName()
的原因。
3.如果我正確理解問題:是的,請執行以下操作:
public void setC(Class<? extends RootType> c) {
this.c = c;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.