Hibernate实现更新的几种方案

在项目中使用Hibernate进行数据管理,考虑到有些数据不能或不需要更新,在做更新时一般会有5种方案:

1.在页面加一些隐藏域

在执行更新跳转时候发送到页面,将数据发送到页面,放到隐藏域里。在用户执行数据更新时候,将隐藏域数据再拿回来

2.执行更新的方法的时候,通过ID拿到原来的,将那些不需要更新的重新set

3.修改hbm.xml文件,将不需要修改的那个字段加一个update="false",

<property name="name" update="false" />

这样在执行更新的时候,就不会更新该字段。

比较简单的办法,但是可能会影响其他操作

4.将需要修改的字段一个一个的执行更新,但这样效率很低

5.在hbm.xml的table中加一个dynamic-update和dynamic-insert属性:

<class name="com.pb.Student" table="STU" dynamic-insert="true" dynamic-update="true">

这样在执行添加的时候,

  Session s = new Configuration().configure().buildSessionFactory().openSession();
  Student stu = new Student();
  Transaction tx = s.beginTransaction();
  //  保存
  stu.setId("13");
  s.save(stu);

执行时候只会执行设置过值的属性,数据库有默认值的字段会填充默认值。

 

执行更新的时候:

  stu = (Student) s.load(Student.class, "1");
  stu.setAge(12);
  s.update(stu);

只会更新修改过的字段。

该方法使用的是利用Hibernate在对象从数据库加载到hibernate session的时候保存了一份快照,做更新的时候与这个快照做比较。

你可能感兴趣的:(hibernate更新)