2017-05-16 4 views
0

코드를 실행하면 org.springframework.transaction.UnexpectedRollbackException Transaction rolled back because it has been marked as rollback-only이 표시됩니다. 그러나 그것의 압연 뒤.org.springframework.transaction.UnexpectedRollbackException : 롤백 전용으로 표시 되었기 때문에 트랜잭션이 롤백 됨

내 코드 :

서비스 수준

public void checkTransaction(Users user) throws Exception { 
    adminDao.insertUser(user); 
    System.out.println("Transaction active :: " + TransactionSynchronizationManager.isActualTransactionActive()); 
    throw (new Exception("Testing Transaction")); 
} 

XML

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="get*" read-only="true" /> 
     <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> 
    </tx:attributes> 
</tx:advice> 

<tx:annotation-driven proxy-target-class="true" 
    transaction-manager="transactionManager" /> 

<aop:config> 
    <aop:pointcut id="serviceOperation" 
     expression="execution(* myapp.admin.service.AdminService.*(..))" /> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> 
</aop:config> 

POJO

My POJO (사용자) Bean은 hbm 파일에 매핑 된 주석이 없습니다. 그러나 매핑 리소스에 등록됩니다.

<bean id="mysessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="mappingResources"> 
     <list> 
      <value>myapp/admin/vo/Users.hbm.xml</value></list> 
    </property> 

    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
</bean> 
+1

'rollback-for = "java.lang.Exception"'maybe? – msparer

+0

아니요. 작동 안함. 같은 오류를 표시합니다. –

+0

'adminDao.insertUser (user)'메소드에 예외가있을 수 있습니다. 작동하는지 확인하십시오. –

답변

0

나는이 문제로 고통 받았다. 무슨 일이 일어나는가는 서비스 레이어에서 select 타입과 그 이후에 insert 타입의 쿼리를 만들 수 없다는 것입니다. 프로세스를 분리해야합니다. 필자의 경우, 컴포넌트 클래스를 선언하고이를 통해 내 서비스의 프로세스를 개별적으로 호출한다. 유용하다고 생각합니다.)