2013-12-10 2 views
0

내 관련 DAO 클래스최대 절전 모드 트랜잭션 블록 문제

@Autowired 개인의 SessionFactory sessionFactory의에서 코드;

public void getTabletbyNameAndSave(String []selectedMedicines) { 
    sessionFactory.getCurrentSession().beginTransaction(); 
    EPrescriber ePrescriber=new EPrescriber(); 
    List<SelectedTablets> selectedTabletsList=new ArrayList<SelectedTablets>(); 
    for (String item : selectedMedicines) { 

     Tablets tablets=null; 
     String hql="from Tablets t where t.category='"+item.trim()+"' "; 
     Query queryList = sessionFactory.getCurrentSession().createQuery(hql); 
     tablets=(Tablets)queryList.uniqueResult(); 

     SelectedTablets selectedTablets=new SelectedTablets(); 
     selectedTablets.setTablets(tablets); 
     selectedTablets.setePrescriberid(ePrescriber); 
     selectedTabletsList.add(selectedTablets); 
     sessionFactory.getCurrentSession().save(selectedTablets); 

    } 

    ePrescriber.setPatientName("Kasun"); 
    ePrescriber.setSelectedTablets(selectedTabletsList); 
    sessionFactory.getCurrentSession().save(ePrescriber); 
    sessionFactory.getCurrentSession().getTransaction().commit();  
} 

여기에 오류가 있습니다. 내 트랜잭션 블록이 올바르게 처리되지 않은 것으로 보입니다. 이 문제에 대해 조언 해주십시오. 감사!

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.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
    at com.priyan.patients.EPrescriberDAO$$EnhancerByCGLIB$$3ce885f5.getTabletbyNameAndSave(<generated>) 
    at com.priyan.patients.ContactsControllers.setTabletsNames(ContactsControllers.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) 
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617) 
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.TransactionException: Transaction not successfully started 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:131) 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
    ... 33 more 

답변

1

로컬 트랜잭션에 수동으로 트랜잭션을 할당하여 올바른 트랜잭션에서 최종 커밋을 실행하려고합니다. 다음과 같은 것 :

@Autowired private SessionFactory sessionFactory; 

public void getTabletbyNameAndSave(String []selectedMedicines) { 

    Session currentSession = sessionFactory.getCurrentSession(); 
    Transaction tx = currentSession.beginTransaction(); 

    EPrescriber ePrescriber=new EPrescriber(); 
    List<SelectedTablets> selectedTabletsList=new ArrayList<SelectedTablets>(); 
    for (String item : selectedMedicines) { 

     Tablets tablets=null; 
     String hql="from Tablets t where t.category='"+item.trim()+"' "; 
     Query queryList = currentSession.createQuery(hql); 
     tablets=(Tablets)queryList.uniqueResult(); 

     SelectedTablets selectedTablets=new SelectedTablets(); 
     selectedTablets.setTablets(tablets); 
     selectedTablets.setePrescriberid(ePrescriber); 
     selectedTabletsList.add(selectedTablets); 
     currentSession.save(selectedTablets); 

    } 

    ePrescriber.setPatientName("Kasun"); 
    ePrescriber.setSelectedTablets(selectedTabletsList); 
    currentSession.save(ePrescriber); 
    tx.commit();  
} 
+0

친애하는 친구 drembert, 나는 당신의 코드로 시도했지만 문제는 여전히 동일합니다. –

+1

환경의 설정이 무엇인지 모르겠지만 오래된 .class 파일을 실행하지 않았는지 확인하십시오. Eclipse에서이 문제가 발생할 수 있음을 알고 있습니다. 문제는 트랜잭션 불일치로 인해 발생한다고 확신하기 때문에 요청하는 유일한 이유가 있습니다. – drembert

+0

SPring + 동면 응용 프로그램 또한 DB로 postgresql –