2016-04-26 49 views
0

我:getNamedQuery也不是沒有積極的交易有效: org.hibernate.HibernateException:getNamedQuery也不是沒有積極的交易有效這個彈簧配置怎麼會不起作用?

org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:340) 
    $Proxy10.getNamedQuery(Unknown Source) 

這裏是我的配置

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

另外,我補充上下文:自tr:註解驅動不起作用的註釋驅動,<tx:annotation-driven/>使用transactionManager從休眠獲得它自己的會話?

我用我的派生sessionFactory在註釋事務中使用hibernate3,那麼如何配置彈簧來做到這一點?

+0

接受答案 –

回答

0

事務管理器依賴會話工廠來管理事務。

通過添加<tx:annotation-driven />您告訴Spring如何劃分交易。在這種情況下,您可以使用註釋。

請參閱該文檔頁面如何使用XML Schema-based configuration

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<!-- bean definitions here --> 

</beans> 
+0

它不是交易TX工作,所以我加了背景元素和映射,以及上下文:註釋驅動因爲我直接從hibernate獲得會話,但沒有用,仍然沒有事務。 –

+0

將Hibernate庫更新爲至少Hibernate 4,確保它在使用事務之前正在工作。您還需要在存儲庫上使用'@ Transactional'來劃分您的事務。 –