Hibernate查询(get)出一个对象,对其的其中一个属性执行set操作,默认自动执行update操作,怎么阻止这个行为?我用的是注解,在网上看了设置查询方法的事物为只读也没能解决掉。求各大神出个主意hibernate对象

解决方案 »

  1.   

    这个关系到用hibernate查找出的对象是为游离态,当你进行修改的时候,他就会自己修改。
    解决办法是你要给出另外一个存储空间存放这些数据。
    我当初怎么转到另外一个空间的记不清楚了,但是再命名一个对象指向这个对象是肯定不行的。
    sorry,只能帮你这么多了
      

  2.   


    查询出来的是持久态。但是我用的是ModelAndDriven和Preparable机制,如果再拿另一个存储空间存的话那就麻烦很多啊。并且这个对象的属性很多
      

  3.   

    1、session.saveOrUpdate(object)。这语句会把游离态的PO转为持久态的PO并提交给数据库2、session.merge(object)。这语句会把游离态的PO转为持久态的PO,并进行合并操作。3、session.lock(object, LockMode.NONE)。这语句只会把游离态的PO转为持久态PO,不作其他操作。不过,PO必须是没有修改过的,这方法挺适合做一个应用层
      

  4.   


    这个明白,但是还是解决不了我的这个问题啊
    不能用lock解决么?尝试了吗
      

  5.   


    这个明白,但是还是解决不了我的这个问题啊
    不能用lock解决么?尝试了吗我的实体是修改过的并且我用的全是JPA注解。不知如何加这个
      

  6.   

    JPA... 这玩意实用性说实在的,挺差的
    还远没达到能够灵活对应复杂业务的级别。
      

  7.   


    这个明白,但是还是解决不了我的这个问题啊
    不能用lock解决么?尝试了吗我的实体是修改过的并且我用的全是JPA注解。不知如何加这个你可以尝试添加事务处理机制
      

  8.   


    这个明白,但是还是解决不了我的这个问题啊
    不能用lock解决么?尝试了吗我的实体是修改过的并且我用的全是JPA注解。不知如何加这个你可以尝试添加事务处理机制给加上了,不过把事务设置成只读的了,还是不能解决问题,还会执行更新操作
      

  9.   

    你的set是不是绑定了update方法,看看有没有dynamic-update="false"
      

  10.   

    set里没有执行别的方法。dynamic-update="false"这个是干什么用的?
      

  11.   

    set里没有执行别的方法。dynamic-update="false"这个是干什么用的?网上查的,防止自动更新的吧,你可以百度多找找看看能不能解决 我一直没遇到你这样的问题 算运气吗?
      

  12.   

    set里没有执行别的方法。dynamic-update="false"这个是干什么用的?网上查的,防止自动更新的吧,你可以百度多找找看看能不能解决 我一直没遇到你这样的问题 算运气吗?这是别人的bug,改呢。我也第一次遇见这种情况
      

  13.   

    这是因为hibernate对持久态的对象会进行自动的比较的。你get出来的持久态的对象你可以用session的evict(Object object)把这个对象变成脱管的就可以了