hibernate 中的update不更新所有的字段

在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语句去直接更新。

posted @ 2011-02-15 22:58  seed_lee  阅读(24675)  评论(0编辑  收藏  举报