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

转载于:https://www.cnblogs.com/seed_lee/archive/2011/02/15/1955631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值