我在action层,调用了update方法,本来应该update(role),但是由于粗心,写成了update(model),model也是一个Role对象,是实现ModelDriven接口返回的那个。
问题来了:
在update之前只role.setName('XXX')。导致我只是修改一下role的名字,结果把他所有关联的用户,权限都给清空了,也就是数据库里,除了name更新外,其他的都置空了。一位大哥告诉我,默认情况下,hibernate就会更新你改过的字段,其他清空,我写了个小程序实验了下:
情景一:
public void update() {
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
transaction.begin();
User user = new User();
user.setId(new Long(6)); // id 为6 的数据是存在的
user.setName("dong");
session.update(user);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
}
}
这个结果就是除了name属性了更新了,其他属性的值都清空了
这时,我发现自己的错误了:把之前的action之中的代表改过来了,
public String edit(){
Role role = roleService.getById(model.getId());
if(role != null){
role.setName(model.getName());
role.setDescription(model.getDescription());
}
roleService.update(role);
return "toList";
}
这时候,只是更新了我修改的字段的值。没有清空其他属性。
我觉得这两个场景的对象都是 离线状态,为什么会有结果却是一个只更新了部分,一个全部呢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。