【编者按】:网学网JAVA为您提供hibernate 中的update不更新所有字段的方法参考,解决您在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语句去直接更新。