本帖最后由 yejunjunjun 于 2011-06-24 01:58:49 编辑

解决方案 »

  1.   

    <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    不一定是你删除回滚了,你把所有的方法都设置成必须运行在一个事物中了,而且没有对读取方法设置只读,所以也可能是Address address = (Address) getHibernateTemplate().get(Address.class,
    id);没有读取出来,你也说了控制台没有输出相应的删除SQL语句。楼主可以在get方法后输出一下address的属性值看看是否获取到了。
      

  2.   

    <prop key="*">PROPAGATION_REQUIRED</prop>
    改成read-only看看楼上说的差不多了,调试下看看
      

  3.   

    1楼 我的address属性能够获取到  它不是空的!谢谢回复!
      

  4.   

    你在代码中如何取dao的?应该使用
    applicationContext.getBean("AddressDAOProxy") 里面是这种方式来取,这样才行,否则事务默认会回滚的。
      

  5.   


    参看以下文章:
    http://www.flydmeng.com/index.php/code/hibernate-non-transaction-session-save-success.html
      

  6.   

    我是通过注入的方式进行取dao的,在配置文件中配置 dao的bean 然后在action中注入 !
    我看了你的文章 ,也试了 你说的 applicationContext.getBean("AddressDAOProxy") 里面是这种方式来取 dao,确实可以运行,安装你文章里面说的,我之所以用你的方法取dao能够删除,是因为连接池里面已经有自动提交事务, 那么我用注入的方法不能删除是因为事务没有配好了? 那我用注入的方法取dao 哪里出错了呢?
     谢谢回复!
      

  7.   

    我有个疑问,通过applicationContext.getBean("AddressDAOProxy")怎么能确定你拿到的是你要删除的对象呢。。? 
      

  8.   

    解决了  原来我一直注入的是 “addressDAO” 而不是“AddressDAOProxy”  所以一直事务回滚!  非常感谢你的回答!