[英]How do I selectively update properties on Spring beans with Hibernate?
給定一個域對象,例如:
class MyPojo
get/setA
get/setB
get/setC
如果我將MyPojo用作表單的modelAttribute,則其內容類似於:
<form:form modelAttribute="myPojo" action="nextPage" method="POST">
<form:input path="a"/>
<form:input path="b"/>
</form>
我有一個Controller方法,例如:
@RequestMapping(value = {"/nextPage"}, method = RequestMethod.POST)
public String theNextPageMethod(@ModelAttribute("myPojo") MyPojo myPojoObj) {
//call to a service/dao impl are omitted for brevity
//but the dao impl does:
sessionFactory.getCurrentSession().saveOrUpdate(myPojoObj);
}
Spring / Hibernate使用屬性“ a”和“ b”的形式輸入值更新myPojoObj,但在我的情況下,它還將屬性“ c”的值設置為null。
這是預期的行為嗎? 如果是這樣,保留分配給屬性“ c”的任何值的最佳實踐是什么? 是否有注釋或其他方式僅更新屬性“ a”和“ b”?
澄清:理想情況下,我正在尋找可以在一個頁面上更新“ a”和“ b”,而在另一頁面上更新“ b”和“ c”的東西,並針對每個特定請求使所有其他屬性保持不變。
試試動態更新屬性,它應該可以解決您的問題。
@DynamicUpdate
現在,僅更改的列將被更新。 另請參見示例http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
您想在哪里存儲實體的狀態? 會話,視圖還是數據庫?
加
@SessionAttributes({ “myPojo”})
給你的控制器
或使用c的值在視圖中使用隱藏的輸入字段
或使用@ModelAttribute注釋控制器方法,並從db每個請求返回實體
您也可以只為表單創建一個新的較小的POJO,並使用Dozer將值復制到實際實體中或從中復制值,並使用動態更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.