在進行使用注解來配置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" />