2012-02-08 145 views
1

我在Spring 3中使用Hibernate3。我試圖用Spring來啓動hibernate事務。 下面給出的是我的配置Hibernate SessionFactory到Spring

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
</bean> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

運行應用程序時我收到以下錯誤。

HibernateException: get is not valid without active transaction 
    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:341) 

我在休眠配置XML

<property name="hibernate.current_session_context_class">thread</property> 

它使用Hibernate事務是在下面的一行代碼:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
Session session = sessionFactory.getCurrentSession(); 
Book book = (Book)session.get(Book.class, id); 

什麼可能是錯誤的呢? current_session_context_class的值是線程以外的任何值嗎?

回答

2

的問題是在該行

會話工廠的sessionFactory =新配置()配置()buildSessionFactory()。;

看來,當你使用Spring事務管理時,你需要使用你在applicationContext.xml中配置的sessionFactory(使用依賴注入)。

以下代碼解決了問題。

private SessionFactory sessionFactory; 
public void setSessionFactory(SessionFactory sessionFactory) 
{ 
    this.sessionFactory = sessionFactory; 
} 

在applicationContext.xml:

<bean id="BookService" class="hibernate.BookServiceImpl"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
相關問題