2013-03-01 37 views
0

我有一個基於Hibernate的模型對象,比如有10個字段。我需要將其中的六個傳遞給Spring表單並將其取回,但其他四個不需要往返表單。但是,當Hibernate對象保存在數據庫中時,他們需要堅持以更新/創建。如果我不需要,我寧願不將它們作爲隱藏字段放在表單上,​​其中一些可能有敏感數據。使用spring處理請求/響應中的非表單域的正確方法?

這樣做的最好方法是什麼?我已經在網上尋找解決方案,但信息/示例相當稀少。

我一直在創建一個Hibernate POJO的實例作爲請求範圍的Spring bean,但我似乎無法得到正確的語法。

回答

1

無論是東西線創建基本DTO只使用六個字段,然後使用返回的反序列化數據更新實體。

或者只是序列化整個hibernate實體,然後反序列化回來併合並。

就你而言,真正的四個領域使圓形truip真的沒有太大的區別。更可能的安全將是一個問題。

在我的應用程序中,我設置了一些轉換服務來自動化實體的反序列化。

DTO在從一些不同的實體呈現數據以用於一種形式時非常有用。

不要創建請求作用域bean,這是矯枉過正。四個未使用的字段將堅持,他們堅持在數據庫/存儲在任何休眠緩存。

在優化之前擔心您的api設計

0

如果模型的所有屬性都不會發送到彈簧前端(表單隱藏),否則您將丟失數據,除非將它保存在某處(Session,StaticMap,數據庫),這可能是一個代價高昂的操作。如果不想兩次點擊數據庫,請將帶有Key的靜態映射放置爲用戶和對象標識,併爲舊對象賦值。

0

如何在Hibernate中爲該實體設置second level cache,以便在使用從UI接收的屬性更新數據庫時不必從數據庫中重新加載實例。

1

我的方法是將一個單獨的表單支持對象。沿

public class ModelForm { 
    //required fields 

    public ModelForm(Model model){ 
     //set the values from model 
    } 

    //getters and setters 

    public void update(Model model){ 
     //set values back to the model 
    } 
} 

public class ModelController { 
    public <return-type> submit(@ModelAttribute ModelForm form) { 
     Model model = loadModel(form);//Load the model object from DB using a id or some other property 
     form.update(model); 
     //other logic 
     save(model); 
    } 
}