spring boot 中的@Transactionnal 注释是否真的创建了一个事务?
@Transactionnal annotation in spring boot does it really create a transaction?
我想在一个方法中调用与我的数据库交互的不同方法。
像这样:
@Autowired
EnteteService es; // service for jpaRepository
@Autowired
SystemOracleServiceJpa so; // service using jdbcTemplate
@Autowired
DetailService ds; // service for jpaRepository
@Transactional
public void configure(EnteteAR entete) throws ConfigurationException {
try{
this.es.save(entete); // first methode
List<DetailAR> details = this.so.getStructure(entete.getTableName());
if(details.size()>0){
this.ds.saveAllDetails(details); // second
this.so.CreateTable(details, entete.getTableName(), "DEM");//third
this.so.createPkIdxDem(entete.getTableName()); // fourth
this.so.CreateTable(details, entete.getTableName(), "BACK"); // fifth
}
else{
throw new ConfigurationException("Configuration error");
}
}catch(Exception e){
throw new ConfigurationException(e.getMessage());
}
}
只有在我的主方法“配置”中的所有这些方法都没有出现错误时,我才想提交。
我在想@transactionnal 注释为此工作,但在内部的每个方法之后提交。
例子:
如果 this.es.save 有效而 this.ds.saveAllDetails 无效,我在数据库中找到 es.save 的数据 :(
有人可以帮助我吗?
提前感谢您的阅读和潜在的帮助。
@Transactional
如果执行的方法抛出未经检查的异常,将自动调用回滚。
您的情况中的 ConfigurationException 是一个已检查的异常,因此它不起作用。
您可以通过将注释修改为
来使其工作
@Transactional(rollbackOn = ConfigurationException.class)
public void configure(EnteteAR entete) throws ConfigurationException {
try{ ....
我想在一个方法中调用与我的数据库交互的不同方法。
像这样:
@Autowired
EnteteService es; // service for jpaRepository
@Autowired
SystemOracleServiceJpa so; // service using jdbcTemplate
@Autowired
DetailService ds; // service for jpaRepository
@Transactional
public void configure(EnteteAR entete) throws ConfigurationException {
try{
this.es.save(entete); // first methode
List<DetailAR> details = this.so.getStructure(entete.getTableName());
if(details.size()>0){
this.ds.saveAllDetails(details); // second
this.so.CreateTable(details, entete.getTableName(), "DEM");//third
this.so.createPkIdxDem(entete.getTableName()); // fourth
this.so.CreateTable(details, entete.getTableName(), "BACK"); // fifth
}
else{
throw new ConfigurationException("Configuration error");
}
}catch(Exception e){
throw new ConfigurationException(e.getMessage());
}
}
只有在我的主方法“配置”中的所有这些方法都没有出现错误时,我才想提交。
我在想@transactionnal 注释为此工作,但在内部的每个方法之后提交。
例子:
如果 this.es.save 有效而 this.ds.saveAllDetails 无效,我在数据库中找到 es.save 的数据 :(
有人可以帮助我吗?
提前感谢您的阅读和潜在的帮助。
@Transactional
如果执行的方法抛出未经检查的异常,将自动调用回滚。
您的情况中的 ConfigurationException 是一个已检查的异常,因此它不起作用。
您可以通过将注释修改为
来使其工作 @Transactional(rollbackOn = ConfigurationException.class)
public void configure(EnteteAR entete) throws ConfigurationException {
try{ ....