给定一个域对象:
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>
我有一个控制器方法,如:
@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”的内容,并为每个特定请求保留所有其他属性静态。
答案 0 :(得分:0)
尝试动态更新属性,它应该可以解决您的问题。
@DynamicUpdate
现在只更新列会更新。另请参见示例http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
答案 1 :(得分:0)
您想在哪里存储实体的状态? Session,view或db?
添加
@SessionAttributes({&#34; myPojo&#34;})
致你的控制器
或者在视图中使用带有c值的隐藏输入字段
或使用@ModelAttribute注释控制器方法并从db返回每个请求的实体
您还可以为表单创建一个新的较小的POJO,并使用Dozer将值复制到真实实体中,并使用动态更新。