我有个ssh项目.里面我hibernate操作基本用到的都是this.getHibernateTemplate().add...这样操作的
但是现在我发现个问题.这个spring包装的getHibernateTemplate()这个对象进行数据库操作的时候好像是使用了lazy是吧?
我先用this.getHibernateTemplate().add()然后在this.getHibernateTemplate().delete().但是打出来的执行sql是先给我添加了一个对象,然后删除的.这个情况怎么处理啊?我感觉是使用了lazy.所以先执行了insert.怎么能让他不是用lazy啊?高人指点

解决方案 »

  1.   

    是不是在配置文件中配置lazy呢?我也忘了,学习下
      

  2.   

    我先用this.getHibernateTemplate().add()然后在this.getHibernateTemplate().delete().但是打出来的执行sql是先给我添加了一个对象,然后删除的. 你这么做 难道不应该 是添加了一个对象然后删除吗?
      

  3.   

    配置文件中的lazy=false 是查询的时候一起加载出来
      

  4.   

    我先用this.getHibernateTemplate().add()然后在this.getHibernateTemplate().delete().但是打出来的执行sql是先给我添加了一个对象,然后删除的. hibernate的执行机制本来就是:Insert--》update--》delete。建议你在Insert后提交事物,或者吧add和delete分开在不同的方法中执行,哎本质还是先不要让add,delete一起执行
      

  5.   

    感觉有点晕?
    LZ删除的数据是哪里得到的?
    你是想删除数据库中没有的数据吗?太晕了吧
    你可以根据ID删除
    getHibernateTemplate().delete(getHibernateTemplate().get(id))
      

  6.   


    既然想先删除数据,那就先delete(),然后flush(),再add()呀,同时提交的话,像6楼说的,hibernate的执行机制本来就是:Insert--》update--》delete。
    还有lazy应该只和读取操作有关系吧,我还真不知道跟增删改有啥关系的?
      

  7.   

    如果add是想insert的话,楼主分两个事务来处理吧
    如果add是把要删除的加到删除列表的话,用楼上说的delete(id)的方式来删吧
      

  8.   

    那为什么不先调用 this.getHibernateTemplate().delete(); 再调用 this.getHibernateTemplate().add();