gpt4 book ai didi

java - 对事务性服务的理解——spring

转载 作者:行者123 更新时间:2023-12-01 14:39:13 26 4
gpt4 key购买 nike

我有一个具有特定方法的服务实现,如下所示:

public class ExampleServiceImpl implements ExampleService {
@AutoWired
@Resource
private RecordRepository recordRepository;

private void processRecord() {
// some code here
}
@Transactional(readOnly=false)
public void processRecord(Record a) {
Record original = getOriginal(a);
recordRepository.saveChanges(a,original);
}
}

其中 Record 类是对象图的根对象。 RecordRepository 类似于下面的子存储库,用于保存图中对象的各种子级。

public class RecordRepository extends BaseRepository<Record> {
@AutoWired
@Resource
private IDao databaseDao;

@AutoWired
@Resource
private SubRecordRepository subRecordRepository;

public void saveChanges(Record a, Record b) {
//Perform some processing on a, b
for(SubRecord subA : a.getSubRecords()) {
subRecordRepository.saveChanges(subA);
}
databaseDao.updateRecord(a);
}
}

public class DatabaseDao extends NamedParameterJdbcDaoSupport implements IDao {

@Autowired
public DatabaseDao(@Qualifier("org.somewhere.Datasource") DataSource ds) {
super();
this.setDataSource(ds);
}

public void updateRecord(Record inRecord) {
String query = (String) sql.get("updateRecord");
SqlParameterSource parms = new BeanPropertySqlParameterSource(inRecord);
getNamedParameterJdbcTemplate().update(query, parms);
}

public void insertSubRecord(SubRecord inSubRecord) {
String query = (String) sql.get("insertSubRecord");
SqlParameterSource parms = new BeanPropertySqlParameterSource(inSubRecord);
getNamedParameterJdbcTemplate().insert(query, parms);
}

// other update and insert methods
}

事务是否会应用于 processRecord 调用中所有涉及的插入\更新?换句话说,如果插入或更新失败,之前从ExampleServiceImpl.processRecord调用的所有插入和更新是否都会回滚?

最佳答案

是的。事务方面确保在调用带注释的方法之前启动事务,并且在方法返回后提交或回滚事务(如果由此方法启动)。

事务拦截器不知道(也不关心)带注释的方法内部调用了哪些其他方法。由 Spring 事务管理器处理的对 DataSource 的每次读写都将包含在同一个事务中。

关于java - 对事务性服务的理解——spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com