Я столкнулся с проблемой, когда у меня есть один метод, который вызывает другой метод в слое обслуживания следующим образом:
@Transactional
@Override
public void method1(List<String> vals)
{
for (String value : vals){
method2(value);
}
}
@Transactional(propagation= Propagation.REQUIRED)
public void method2(String value)
{
//Hibernate Call 1
//Hibernate Call 2
}
Я поместил примечание транзакции в методе 2, так как его можно вызывать из контроллератакже.
И мой менеджер транзакций выглядит так:
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:aspectj-autoproxy/>
<!-- Transaction manager for hibernate -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataSource" ref="dataSource"></property>
</bean>
Когда я запускаю этот код, когда контроллер вызывает метод 1, он выдает следующую ошибку:
12/22/11 18: 4455410: ОШИБКА [http-8181-1] (.support.TransactionSynchronizationUtils: 87) - TransactionSynchronization.beforeCompletion вызвала исключение java.lang.IllegalStateException: для ключа [org.hibernate нет значения.ИмплJava: 187) в org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCompletion (TransactionSynchronizationUtils.java:84) при org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion (AbstractPlatformTransactionManager.java:895) в org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (AbstractPlatformTransactionManager.java:693)в org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager.java:678) в org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionInterceptor.java:116) в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:171) в org.springframework.aop.framework.JdkDynamicAopho.jpgProxy.jp(Неизвестный Кислыйce)