java - Spring Data JPA Rollback If Save Method Throw Exception
问题描述
问题解决:转到最后一个条目
如果 crudrepository 的保存方法抛出任何异常,我正在尝试测试我的方法的回滚功能。我有一个主循环,它扫描我的文件并为每一行插入一条记录到表中。我意识到当发生任何异常时,循环中断但回滚操作不起作用。我错过了什么?提前致谢
主要代码
@Component
public class ExcelReader {
@PostConstruct
@Transactional
public void openExcel() throws IOException {
int insertedRowCount = 0;
int updatedRowCount = 0;
int exceptionRowCount = 0;
//some codes
while (true) {
//some logic
City2CityEntity city2CityEntity = new City2CityEntity();
city2CityRepository.save(city2CityEntity);
if(insertedRowCount == 500){
throw new RuntimeException();
}
insertedRowCount++;
}
}
System.out.println(insertedRowCount + " number of rows inserted");
System.out.println(updatedRowCount + " number of rows skipped");
System.out.println(exceptionRowCount + " couldn't inserted");
}
}
存储库
@Repository
public interface City2CityRepository extends CrudRepository<City2CityEntity, Long> {
Iterable<City2CityEntity> findAll();
City2CityEntity findByCompanyAndOrgAndDst(String company, String org, String dst);
}
实体
@Entity
@Table(name = "xxx_berkin_city2city", schema = "CRANE_AT", catalog = "")
public class City2CityEntity {
//getter setters and fields
}
插入 501. 记录后,我抛出了异常。
解决方案
@Transactional(rollbackFor = Exception.class)
这是上面的答案。我在这里找到: @Transactional(rollbackFor = Exception.class) 和 @Transactional(propagation=Propagation.REQUIRED) 之间有什么区别
推荐阅读
- javascript - 有没有办法在 Android 中使用 JavaScript 或 Python 将用户从 Instagram 等应用内浏览器重定向到 Google Chrome 浏览器?
- c# - 如何阻止图像的通用拖放处理程序?
- python-3.x - discord.py 临时声音
- bazel - 您如何查询由 Bazel 中的外部存储库定义的所有包
- javascript - Google 表格自定义脚本遍历范围并以确定的顺序打印值
- javascript - 将没有 id 和 class 的第一个值放在变量 puppeteer js 中
- bash - 带有“echo -e”的转义序列未按预期工作
- javascript - 提示请求并根据条件重新分配值
- multipartform-data - 使用 Quarkus 处理多部分/表单数据
- python - 在 Python 中创建和绘制一个数组作为另一个数组中值的函数