原因
在我们写代码的时候返回添加的数据中有一些数据是我们添加表单中没有的,这样会造成代码的丢失,当我们修改完成的时候JPA会自动的转化为空
有三种处理方式
1我们把前台的表单设置为隐藏表单,这样前台就可以接收到数据(但是复杂,而且密码这样的东西会加密,这样就二次加密我们自己把密码都改了)
2在我们domain实体类中加上一个注解,我忘记了,但是这样JPA就不会是用set的时候添加改属性,所以也不会修改,但是我们添加的时候也添加不进去(不使用)
3我们先去查询数据,然后把我们查询的数据作为我们传入接收的实体类,这样我们能接受前台的数据也能处理数据丢失了
@ModelAttribute("editEmployee") public Employee beforUpdate(Long id,String cmd){ //这样判断是为了区分update和delete if(id!=null &&"update".equals(cmd)){ Employee employee = employeeService.findOne(id); //因为这里会和department产生关联,产生持久化对象。出现N TO N问题 employee.setDepartment(null); return employee; } return null; }
我们需要把他和我们需要的实体类连接起来
@RequestMapping("/update") @ResponseBody //@ModelAttribute("editEmployee")保证 public Employee beforUpdate返回的Employee是这里的Employee一样的 public JsonResult update( @ModelAttribute("editEmployee")Employee employee){ return this.updateandsave(employee); }