我数据库里有一张用户表(User),这个表建有触发器,当对这张表进行添加、修改、删除时,会将变更记录的id插入变更通知表(Notify),现在的情况是,我用getHibernateTemplate().get(entityClass, id)该方法去获取一个用户时,再控制台里看到了update的sql语句,同时变更通知表(Notify)里也有了相应的内容,也就是说这个get方法让User表更新了,这是怎么回事???我把getHibernateTemplate().get(entityClass, id)方法换成findUniqueBy(...)方法后,问题消失了,另外我把实体类的注解从get方法移到属性上面也能解决问题,求各位大神帮忙看看是什么问题!

解决方案 »

  1.   

      我想到一个可能是这样的。 在get前,你可能能Hibernate发送过update操作, 不过这个update操作Hibernate自己先藏起来了,并没有马上发给数据库, 当你调用get方法时,hibernate能识别出get与update在顺序上内在关系, 这样,它先执行了先前的update再执行get。 从而保证数据的一致性。 
     
      从设计模式上说, 这是Command模式的体现。 
      

  2.   


    谢谢您的回复,我仔细检查了每行代码,没找到有update的操作...