2013-12-10 5 views
2

Я обновляю свое приложение до Spring 3.2.5 и Hibernate 4.2.7. Все компилируется снова, но когда я запускаю приложение, я получаю:Ошибка Нет сеанса, связанного с текущим потоком с Hibernate 4 и Spring 3

org.hibernate.HibernateException: No Session found for current thread 
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:990) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl$EventIdInitializer.doInitialize_aroundBody0(SequenceGeneratorServiceImpl.java:182) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl$EventIdInitializer$AjcClosure1.run(SequenceGeneratorServiceImpl.java:1) 
at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:59) 
at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect$1.proceedWithInvocation(AbstractTransactionAspect.aj:65) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) 
at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96c(AbstractTransactionAspect.aj:63) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl$EventIdInitializer.doInitialize(SequenceGeneratorServiceImpl.java:179) 
at com.traficon.tmsng.server.common.cache.initializer.BaseCoherenceInitializer.initializeIfNeeded(BaseCoherenceInitializer.java:236) 
at com.traficon.tmsng.server.common.cache.initializer.BaseCoherenceInitializer.getCache(BaseCoherenceInitializer.java:98) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl.getHighestEventId(SequenceGeneratorServiceImpl.java:120) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl.access$0(SequenceGeneratorServiceImpl.java:118) 
at com.traficon.tmsng.server.common.sequence.SequenceGeneratorServiceImpl$SequenceGeneratorInitializer.run(SequenceGeneratorServiceImpl.java:149) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 

Если вы смотрите через StackTrace, вы видите аспект сделки, поэтому я предполагаю, что это нормально.

У меня есть это в моем контексте приложения:

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

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/> 

Мой SessionFactory является org.springframework.orm.hibernate4.LocalSessionFactoryBean.

Я поставил:

Любая идея, что может быть не так?

UPDATE:

кажется только методы с аннотацией @Transactional(Propagation.SUPPORTS) и @Transactional(Propagation.NEVER) не работают. Если я изменю их на Propagation.REQUIRED, тогда он будет работать. Но почему? Это работало отлично с Spring 3.0.4 и Hibernate 3.5.6.

+0

вы включены и/или обновления вашего OpenSessionInViewFilter? –

+0

Мне он никогда не нужен. Я использую ClassPathXmlApplicationContext напрямую, это не webapp. –

ответ

1

Проблема известная проблема с пружиной кажется. См. https://jira.springsource.org/browse/SPR-9020.

Для устранения этой проблемы использовать this class и установить его в качестве hibernate.current_session_context_class в свойствах Hibernate в Spring SessionFactory (который должен быть org.springframework.orm.hibernate4.LocalSessionFactoryBean нормально)

Смежные вопросы