hibernate 中的update不更新所有的字段
2011-02-15 22:58
162 查看
在hibernate中,在使用其update()方法的时候,会发出一条update语句,而这条语句中,hibernate会更新所有的字段,不管程序员想不想更新所有的字段,hibernate发出的sql例句如下:
Hibernate:
update
Peopel
set
age=?,
job=?,
sex=?
where
firstName=?
and secondName=?
但是,加入我只是想修改sex字段的值,而不想修改其他的age…的值,具体做法有如下:
第一种方式,极少有用到的,这种方式的做法是,配置不想让hibernate更新的字段,使用起来极其死板,不灵活。具体如下,
如果使用配置文件的方式,则在property节点中配置一个update的属性,指定其值为false,意思是使这个当前的property字段不参与更新.
如果使用annotation的方式,则在属性上注解@column的updateable属性为false即可。
第二种方式,配置xml映射文件中的class节点中的属性,dynamic-update="true",这个时候就可以在更新过的字段回去更新,而没有更新过的字段,则不会去更新。
说明:如果设置成为dynamic-update="true"的方式去update自己修改过的字段,是有前提的,也就是要更新的对象必须处于持久态(Persistent)的状态,这样hibernate才有的比较该对象是否已经修改过,并且修改过哪些字段的哪些值。如果处于脱管态(Detached)(跨session),则update的时候hibernate同样的回去更新所有的字段的值。
如果要使用dynamic-update="true"的配置,并且想跨session,而且还想只更新操作的对象的某些字段而不是全部字段,则还可以使用hibernate提供的另一个类似于更新的方法session2.merge(object),但是,这个方法在操作合并之前,发一条sql语句去数据库中查找这样一个需要操作的对象,查询到以后,则会更想要更新的对象进行比较,而后,才会发一条希望看到的更新的sql语句。
第三种方式,就是推荐使用的方式,使用hibernate提供的HQL语句去直接更新。
Hibernate:
update
Peopel
set
age=?,
job=?,
sex=?
where
firstName=?
and secondName=?
但是,加入我只是想修改sex字段的值,而不想修改其他的age…的值,具体做法有如下:
第一种方式,极少有用到的,这种方式的做法是,配置不想让hibernate更新的字段,使用起来极其死板,不灵活。具体如下,
如果使用配置文件的方式,则在property节点中配置一个update的属性,指定其值为false,意思是使这个当前的property字段不参与更新.
如果使用annotation的方式,则在属性上注解@column的updateable属性为false即可。
第二种方式,配置xml映射文件中的class节点中的属性,dynamic-update="true",这个时候就可以在更新过的字段回去更新,而没有更新过的字段,则不会去更新。
说明:如果设置成为dynamic-update="true"的方式去update自己修改过的字段,是有前提的,也就是要更新的对象必须处于持久态(Persistent)的状态,这样hibernate才有的比较该对象是否已经修改过,并且修改过哪些字段的哪些值。如果处于脱管态(Detached)(跨session),则update的时候hibernate同样的回去更新所有的字段的值。
如果要使用dynamic-update="true"的配置,并且想跨session,而且还想只更新操作的对象的某些字段而不是全部字段,则还可以使用hibernate提供的另一个类似于更新的方法session2.merge(object),但是,这个方法在操作合并之前,发一条sql语句去数据库中查找这样一个需要操作的对象,查询到以后,则会更想要更新的对象进行比较,而后,才会发一条希望看到的更新的sql语句。
第三种方式,就是推荐使用的方式,使用hibernate提供的HQL语句去直接更新。
相关文章推荐
- Hibernate之update(1)——更新部分字段
- Hibernate 更新部分更改的字段 hibernate update
- Hibernate update方法,只更新指定字段,已解决
- Hibernate更新某些字段的几种update方法
- hibernate中的update方法只更新部分字段的方法
- hibernate update 只更新部分字段的3种方法
- Hibernate 更新部分更改的字段 hibernate update
- Hibernate 更新部分更改的字段 hibernate update
- Hibernate更新某些字段的几种update方法
- Hibernate update 只更新被修改字段
- Hibernate更新某些字段 update方法
- Hibernate更新部分字段而不更新所有字段,影响性能
- SSH利用getHibernateTemplate().update更新所需要更新的部分字段
- Hibernate update方法,只更新指定字段
- dynamic-insert dynamic-update mutable="false" (让hibernate生成的sql不包括所有字段、指定不可变的实体)
- hibernate update 只更新部分字段的3种方法(转载)
- hibernate 更新所有字段问题
- Hibernate——update-只更新被修改的字段
- Hibernate——Hibernate4.2更新部分更改的字段 hibernate update
- hibernate 中更新某些字段的几种update方法