에서 다른 @Transactional 방법에서 하나 개의 서비스에서 @Transactional 메소드를 호출하는 방법 내가 가진 :다른 서비스
1) 서비스 :
@Service("scanner")
@Transactional
public class Scanner
{
@Inject
AnalyzerService analyzerService;
@Transactional
private void scan() {
analyzerService.analyze();
}
}
2) 서비스 :
@Service
public class AnalyzerService
{
@Inject
AnalyzerDao analyzerDao;
@Transactional
public void analyze() {
List<AnalyzerResult> items;
// code filling items list removed;
save(items);
}
@Transactional
private void save(List<SomeType> items) {
analyzerDao.save(items); // <--- Why after call save items are not saved in DB?
}
}
3) Dao :
@Repository
public class AnalyzerDao extends GenericDaoImpl<AnalyzerResult>
{
//all needed methods for find, edit, delete and save which works fine in other cases.
}
질문 :
analzyerDao.save(items)
DB가 여전히 비어있는 이유는 무엇입니까? 트랜잭션에 문제가 있습니까? 내가 DB하지만 예외가 나타나는 라인 analyzerDao.save(items)
다음 기록을 던져 직후 flush()
방법 getSession().getTransaction().commit()
를 호출하면 는 :
Caused by: org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:660)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy44.execute(Unknown Source)
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
... 1 more
Caused by: org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:127)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
... 9 more
어떻게
은 구현 방법의 벌금을 '저장'을 작업을 수행해야 하는가? 첫 번째 트랜잭션이 완료된 후에뿐만 아니라, line analyzerDao.save (items)에 항목을 저장하려면 어떻게해야합니까?
감사합니다. REQUIRES_NEW가 도움을주었습니다. :) – Roman