2012-02-08 6 views
1

Я использую Hibernate3 с Spring 3. Я пытаюсь запустить транзакцию спящего режима с использованием Spring. Ниже мои конфигурации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> 

Код, который использует спящий режим транзакции является:

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

Что может быть плохого в этом? Является ли значение для current_session_context_class чем-то другим, кроме потока?

ответ

2

Проблема заключалась в линии

SessionFactory SessionFactory = новая конфигурация() настройки() buildSessionFactory()..;

Кажется, когда вы используете управление транзакциями Spring, вам необходимо использовать sessionFactory, который вы настроили в applicationContext.xml (с использованием инъекции зависимостей).

Следующий фрагмент кода решил проблему.

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> 
Смежные вопросы