【发布时间】:2020-12-11 10:47:21
【问题描述】:
我在服务层方法过程中测试@Transactional回滚。
在我的代码下面。
@Transactional(rollbackFor = UnsupportedOperationException.class)
public RetryHistory failedOnCreateContainer() {
final Container container = new Container();
try {
Container savedContainer = containerRepository.save(container);
throw new UnsupportedOperationException("Force Error");
} catch(UnsupportedOperationException e) {
log.error("Error : {}", e.getMessage());
return retryHistoryRepository.save(new RetryHistory(container.getName()));
}
}
我强制出错。在这样做时,我认为数据不应该存储在容器表中。并且数据应该存储在 retryHistory 表中。
但出乎我的意料,数据也存储在容器表中。
你能告诉我为什么吗?
【问题讨论】:
-
不是 100% 确定,但根据我的想法,如果您对实现 Hibernate 的正式方式有想法,请确认一下。您在开始时占用了 Transaction 对象,并且在该事务处理中您得到错误并假设直到该实际对象不可用于处理或您不允许使用相同的对象。简而言之,事务对象不存在用于数据库处理。它在此之前刷新数据库对象。如果您共享错误快照,那就太好了。
标签: spring-boot spring-data-jpa transactions