2014-06-17 142 views
2

我正在開發一個使用spring和hibernate的應用程序。NoSuchBeanDefinitionException:沒有定義名爲'transactionManager'的bean

當我運行我的應用程序收到此錯誤信息:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined 

在我的上下文應用程序文件我有這樣的:

<bean id="tansactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"></property> 
</bean> 

我GOOGLE了這個問題,我找到了一個解決方案,我必須改變這一行:

<bean id="tansactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 

通過:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 

但我得到了另一個問題:

org.springframework.beans.NotWritablePropertyException: Invalid property 'sessionFactory' of bean class [org.springframework.orm.jpa.JpaTransactionManager]: Bean property 'sessionFactory' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 

我怎樣才能解決這個問題?

+0

發佈完整的堆棧跟蹤。 –

+0

你用jpa和hibernate嗎?如果您使用jpa,則必須將sessionFactory更改爲entityManagerFactory。 – OQJF

+3

以及您的第一種方法失敗的原因僅僅是因爲bean ID中的拼寫錯誤。 –

回答

1

如果使用會話工廠,所以這應該工作

<bean id="tansactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"></property> 
</bean> 

,但如果你想使用JPA EntityManager的,所以你需要

<bean name="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
      <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

請參考migrating-to-spring-3-1-and-hibernate-4-1它包含了很好的例子所需配置

2

在註釋「tansactionManager」缺失以及「r」,「transactionManager」中有錯字。我做了修正,對我來說工作得很好。

相關問題