Java JpaTransactionManager没有';t回滚事务
我使用JHipster制作了一个简单的应用程序并编写了一个服务,代码如下:Java JpaTransactionManager没有';t回滚事务,java,spring,transactions,spring-data-jpa,jhipster,Java,Spring,Transactions,Spring Data Jpa,Jhipster,我使用JHipster制作了一个简单的应用程序并编写了一个服务,代码如下: @Service @Transactional public class OperateQueueActionService { @Transactional(rollbackFor = Throwable.class) public OperateQueueDTO apply(OperateQueueDTO operateQueueDTO, QueueEventType queueEventType,
@Service
@Transactional
public class OperateQueueActionService {
@Transactional(rollbackFor = Throwable.class)
public OperateQueueDTO apply(OperateQueueDTO operateQueueDTO, QueueEventType queueEventType, String deskNo) {
StateMachine<QueueStatus, QueueEventType> stateMachine = operateQueueActionMachineService.getStateMachine();
try { QueueEventDTO operateQueueEventDTO = operateQueueUtils.saveQueueEvent(operateQueueDTO, queueEventType, deskNo);
......in process will throw RuntimeException.
} finally {
stateMachine.stop();
}
}
}
@服务
@交易的
公共类OperationeActionService{
@事务(rollboor=Throwable.class)
要应用的公共运算符(OperateQueueTo OperateQueueTo,QueueEventType,QueueEventType,String deskNo){
StateMachine StateMachine=OperationEueActionMachineService.getStateMachine();
请尝试{QueueEventDTO OperateQueueEventTo=operateQueueUtils.saveQueueEvent(OperateQueueUedTo,queueEventType,deskNo);
…进程中将引发RuntimeException。
}最后{
stateMachine.stop();
}
}
}
我希望事务回滚,而不是保存queueEvent
,但记录保存在数据库中。这是事务日志:
[2018-07-24 12:04:51.861][XNIO-2任务-6]警告
o、 s.s.l.CompositeStateMachineListener-状态上下文期间出错
java.lang.RuntimeException:无效状态 在
stateContext(OperateQueueStateMachinelGlistener.java:58)
在java.lang.Thread.run(Thread.java:745)[2018-07-24 12:04:51.871]
[XNIO-2任务-6]信息c.h.q.s.u.运营商房地产机械润滑油
-4d667539-3316-491d-a0db-240e29b0fcae状态机状态为:状态机停止[2018-07-24 12:04:51.872][XNIO-2任务-6]调试
o、 s.orm.jpa.JpaTransactionManager-启动事务提交
[2018-07-2412:04:51.874][XNIO-2任务-6]调试
o、 s.orm.jpa.JpaTransactionManager-在上提交jpa事务
实体管理器
JPA配置没有问题,spring状态机已捕获在StateMachineListenerAdapter中引发的异常。operateQueueUtils是什么样子?@Service@Transactional public class operateQueueUtils{public OperateQueueUedTo save(OperateQueueDTO OperateQueueDTO){OperateQueueUedTo OperateQueueU1=operateQueueService.save(OperateQueueEdTo);sendQueueChangeNotifyMsg(OperateQueueEdTo1);返回OperateQueueEdTo1;}保存QueueEvent的公共QueueEvent(OperateQueueEdTo OperateQueueEdTo,QueueEventType QueueEventType,String deskNo){QueueEventDTO=new QueueEventDTO();QueueEventDTO.SetOperateQueueEdTo(OperateQueueEdTo.getDescription());返回queueEventService.save(queueEventDTO);我的数据库是Oracle我也遇到同样的问题,你怎么解决的?