上一篇文章说了hibernate中可以设置dynamic-update 来实现跟新某些字段。但是使用了HibernateTemplate,调用HibernateTemplate.saveOrUpdate()方法却还是全部字段更新,分析了一下应该是load和update不同session导致的。 于是乎查找资料,发现可以使用以下方式实现:
用Entity entity = hibernateTemplate.get(Entity.class, pk); 取出entity后你想修改那个就set那个,其它不用管。然后,hibernateTemplate.update(entity); 这样,肯定你想要修改的字段已经更新了,至于其它字段,由于延迟加载了,已经不会重新保存。(让Hibernate在执行时把Sql语句打印出来睇一睇就知道啦)。
public void update(String remark,int status,int id){
Student student = (Student)dao.getHibernateTemplate().get(Student.class, id);
student.setComments(remark);
student.setStatus(status);
student.setId(id);
dao.getHibernateTemplate().update(student);
// Object[] value = {remark,status,id};
// dao.getHibernateTemplate().update("update Student SET comments=?,status=? where id=?",value);
}
其中remark和status是我想更新的字段。
上边的步骤其实挺简单,就是先获得这一条需要更新的数据的id,根据id找到这条数据,然后用set方法去设置需要更新的字段,最后用update更新这个实体(entity)。就over了!