【发布时间】:2020-01-22 11:45:36
【问题描述】:
我有以下方法:
public void deleteProject(Project project) {
employeeRepository.removeEmployeesFromProject(project);
roleRepository.removeRolesFromProject(project);
projectRepository.deleteProject(project);
}
如果任何 sql 查询失败(意外异常),我想回滚并撤消之前完成的操作。因此,如果第三个查询失败,我想撤消前两个查询的更改。有没有办法,最好的方法是什么?我读到了@Transactional 注释,它在一个事务中发送所有查询。我认为如果出现故障可以自动回滚,但只是用 @Transactional 注释方法并没有这样做。
【问题讨论】:
-
您要查找的术语是 rollback,是的,这就是事务的用途。
-
将方法标记为
@Transactional还不够吗?因为我在另一个线程中看到这是推荐的解决方案,但它并没有为我做回滚。 -
然后你要研究为什么它不适合你。您使用的是哪个数据库?
-
我正在使用 PostgreSQL 数据库。
-
好。我假设启用了事务管理。
deleteProject是否在 spring 组件类中(例如@Service),并且您是从类的外部调用方法,因此可以检测到注释并对其进行操作?
标签: java spring hibernate spring-boot jpa