簡體   English   中英

如何使用Hibernate有選擇地更新Spring bean的屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM