Calling method 'get' is not valid without an active transaction


在進行使用注解來配置Spring和Hibernate的整合的時候, 遇到了這個問題, 它的意思是說在調用'get'方法的時候,沒有活動的事務.

原因分析: Hibernate強制要求在進行數據庫操作的時候, 都必須包含在事務當中. 這個時候因為沒有事務的管理, 因此報了這個錯誤. 

解決辦法: 當然是為這個方法開啟事務, 開始事務的方法有兩種,

1. 使用Transaction transaction = session.beginTransaction(), 或者是

   /**
     * 查詢用戶
     * @param uid
     * @return
     */
    @Override
    public User get(Integer uid) {
        Transaction transaction = session.beginTransaction();
        User user = null;
        try {
            user = session.get(User.class,uid);
            transaction.commit();
        } catch(Exception e) {
            e.printStackTrace();
            transaction.rollback();
        }
         return user;
    }

 

2. 使用注解.

 但是目前注解加上去沒有能夠解決問題, 那么就推薦使用前面一種方法, 在調用get方法的前后加上代碼

 配置事務有點復雜,暫時寫到這里, 等待更新

<!-- 事務管理器配置, Hibernate單數據源事務 -->
    <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <!-- 使用annotation定義事務 -->
    <tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" />

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM