问题背景:在某个表中增加了一个新字段,字段可为空。在insert数据后,之后update这条数据时,新增的这个字段并没有赋值,即new对象时这个字段是null,然后hibernate就将null更新到DB中去了,本项目使用的是Oracle。
分析:默认情况下,使用hibernateTemplate的更新,会将对象全量更新,就会把null值更新到DB中,如果原来字段是有值的,这下好了,执行一次对象的更新就会丢失数据。
解决方案:
方案1:在hibernate的实体映射文件的class上配置,dynamic-update="true"
方案2:如果是只针对某个字段,可在hibernate的实体映射文件中某个字段的property上配置,update="false"
方案3:自己写HQL语句进行更新操作,但是要确保别人在操作这个对象时不要使用hibernateTemplate的更新,但是你怎么控制的了别人。