Hibernate SessionFactory через Spring - PullRequest
1 голос
/ 08 февраля 2012

Я использую Hibernate3 с Spring 3. Я пытаюсь запустить транзакцию hibernate с помощью 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)

У меня есть следующая строка в конфигурации hibernate 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 чем-то отличным от thread?

1 Ответ

2 голосов
/ 09 февраля 2012

Проблема была в строке

SessionFactory sessionFactory = новая конфигурация (). Configure (). BuildSessionFactory ();

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

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

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

В приложенииContext.xml:

<bean id="BookService" class="hibernate.BookServiceImpl">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...