我在hibernate里面使用update(Object)方法后
Object是一个实体类对象
然后我只给其中两个字段给值 
然后在更新 
为什么数据库与其相关的其它字段值都为空了呢 ?
  

解决方案 »

  1.   

    Hibernate在 update持久对象的时候,产生的sql语句是把所有的属性统统set一遍,没有的就设置成 NULL
    <class  name="ClassName"   table="tableName" dynamic-update="true"  dynamic-insert="true|false"/>  
    这个设置只对在一个session中的有状态的PO起作用,就是动态生成 了update语句,set要更新的属性。另外,你可以load对象,在set属性,在update。OK?不知道说明白了没有。
      

  2.   


    恰恰相反,动态更新是提高了性能。例如:执行如下sql语句,你认为哪个会更快些
    1、update table set name=?, sex=? .........xxxx=xxx,xxxx=xxxxx where ...(非动态更新 dynamic-update="false")2、update table set name=?(动态更新 dynamic-update="true")一般的不设置默认是false。
      

  3.   

    都没成功啊  
    设置属性还是不行啊  
    一样的可以把数据库的值set成null 啊  
      

  4.   

    你要先 load一个对象出来,在set属性,在update
      

  5.   

    数据库块中的操作性能提高了,但是hibernate低层的性能降低了,他需要判断哪个属性是需要更新的属性。
    对于属性少的实体修改推荐这种使用方法,对于属性多的实体还是使用先load后修改比较好。
      

  6.   

    无论是否使用动态更新,都是先load,在set,在update,你认为在内存执行速度快,还是生成网络连接到数据库,在更新数据快?可以做个简单的测试。来验证我们各自的观点。