CSDNRGY
2017-02-06 09:32
采纳率: 99.3%
浏览 1.0k
已采纳

为什么我无法通过spring管理hibernate的事务?

下面这段代码有什么问题吗?

为什么无法自动开启事务并提交?

spring想管理hibernate的事务,也就是通过这几行代码就可以了吧?

通过spring管理事务,执行后没有任何的效果,我觉得应该是事务没有提交的事

不过是否开启也不确定,如何能排查出问题原因呢?

     <!-- spring接管事务 -->          
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 
    <!-- 事务增强 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <!-- 使用aop自动开启/提交事务 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.web.service.*.*(..))" id="serviceMethod"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
    </aop:config>

图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • CSDNRGY 2017-02-08 08:30
    已采纳

    原来的代码

     Session session = sessionFactory.openSession();
    

    现在的代码

     Session session = sessionFactory.getCurrentSession();
    

    用getCurrentSession可以开启事务,不知道为什么openSession不可以

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Z. ZHANG 2017-02-07 11:37

    在spring的配置文件里 只需要加入这个

     <bean id="transactionManager"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        <tx:annotation-driven transaction-manager="transactionManager" />
    

    然后在你的dao层,加上@Transactional,表示这个类接受事务管理,

     package com.dao;
    
    import javax.annotation.Resource;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;
    import com.pojo.User;
    
    @Repository("userDAO")
    @Transactional
    public class UserDAO {
    
        @Resource
        private SessionFactory sessionFactory;
    
        private Session openSession() {
            return sessionFactory.openSession();
        }
    
        public void insert(User user) {
            openSession().save(user);
        }
    }
    
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题