开发者社区> 问答> 正文

关于 hibernate 的更新问题

我在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";
    }

这时候,只是更新了我修改的字段的值。没有清空其他属性。
我觉得这两个场景的对象都是 离线状态,为什么会有结果却是一个只更新了部分,一个全部呢

展开
收起
爵霸 2016-03-04 11:44:24 2256 0
1 条回答
写回答
取消 提交回答
  • 因为默认就是全部更新 没有部分更新 要实现部分更新就需要先用ID查出来再进行BO和PO的转换

    2019-07-17 18:52:03
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载