spring - 使用spring注解@Transactional(rollbackFor = Exception.class)不能回滚事务,发生异常时
问题描述
// NewParameterService.class
@Override
@Transactional(rollbackFor = Exception.class)
public NewParameter createNewParameter(NewParameterCreateRequest request) throws EntityNotFoundException {
// newParameterDao.createNewParameter(request, dataSetId) An exception was thrown
// but newParameterDao.createNewParameter(request, dataSetId) had inserted can not rollback
NewParameter newParameter = newParameterDao.createNewParameter(request, dataSetId);
newParameterValueDao.saveNewParameterValues(newParameter.getId(), values);
return newParameter;
}
//NewParameterDao.class
@Autowired
@Qualifier("paramterJdbcTemplate")
private JdbcTemplate paramterJdbcTemplate;
@Override
public NewParameter createNewParameter(NewParameterCreateRequest request, Long datasetId) {
String sql = "INSERT INTO new_parameters(name) VALUES (?,?,?,?,?) RETURNING id";
final Long newParameterId = paramterJdbcTemplate.queryForObject(sql,
new Object[]{request.getName()},
Long.class);
return NewParameter.builder()
.name(request.getName())
.id(newParameterId)
.build();
}
//paramterJdbcTemplateConfig.class
@Bean
public JdbcTemplate paramterJdbcTemplate() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:postgresql://127.0.0.1:15432/pipeline_schema");
dataSource.setUsername("postgres");
dataSource.setPassword("123456");
dataSource.setDriverClassName("org.postgresql.Driver");
return new JdbcTemplate(dataSource);
}
//newParameterValueDao.class
@Override public void saveNewParameterValues(long parameterId, List values) { datasetsSchemaJdbcTemplate.batchUpdate(SQL_STUDENT_INSERT, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement PreparedStatement, int i) 抛出 SQLException {preparedStatement.setLong(1, parameterId);preparedStatement。 setString(2, values.get(i).getValue());preparedStatement.setBoolean(3, values.get(i).isDefaultValue());}
public int getBatchSize() {
return values.size();
}
});
}
解决方案
推荐阅读
- git - 带有 ssh 的 git clone 在 Fedora 29 中无限期挂起
- javascript - Puppeteer 在 Google Cloud Functions 上执行缓慢
- docker - 配置以通过 gitlab-ci 将 minio docker 容器作为服务运行以进行测试
- jquery - 如何在不关闭引导模式的情况下提交注册表单并返回结果
- javascript - 回显 PHP 默认选中的 JSTree 列表项
- php - 我想在 wp 媒体文件夹中上传 PDF 文件并更新 ACF 字段
- angular - 模板解析错误:没有将“exportAs”设置为“matMenu”的指令
- c - I could not find the problem with my code
- asp.net-mvc - View is expecting for viewmodel while List item has been passed to controller
- html - Why is the ul with class "subnav" not bigger?