Java 将事务包装到现有的事务方法上?
如果我有一个在类级别上标记为Java 将事务包装到现有的事务方法上?,java,spring,Java,Spring,如果我有一个在类级别上标记为@Transactional的基本Dao类,这将导致Dao的每个调用都在它自己的事务中运行 如果我在某个地方创建了一个使用多个对不同dao方法的调用的方法,会怎么样?这些调用是在各自的事务中运行,还是围绕事务进行包装 @Service @Transactional class BaseDao<T> { //each of these methods will run in a transaction public void save(T e
@Transactional
的基本Dao类,这将导致Dao的每个调用都在它自己的事务中运行
如果我在某个地方创建了一个使用多个对不同dao方法的调用的方法,会怎么样?这些调用是在各自的事务中运行,还是围绕事务进行包装
@Service
@Transactional
class BaseDao<T> {
//each of these methods will run in a transaction
public void save(T entity) { }
public void update(T entity) { }
}
@Service
class PersonFacade() {
//will this "wrapp" the transaction?
@Transactional
void update() {
dao.find();
dao.update();
}
}
@服务
@交易的
类BaseDao{
//这些方法中的每一个都将在事务中运行
公共无效保存(T实体){}
公共无效更新(T实体){}
}
@服务
类PersonFacade(){
//这个“包装”会影响交易吗?
@交易的
无效更新(){
dao.find();
dao.update();
}
}
如果被包装,你会认为这是一个很好的做法,在一个通用的DAO类中有<代码> @事务性< /代码>注释,以便DAO可以直接用作<代码> @ AutoWordBaseDAO/COD>管理CRUD操作吗?并且只有在需要时,才创建外观来封装需要在单个事务中运行的多个crud调用
或者我应该更好地从基本dao中删除该事务性调用吗?如果将两个调用都包装到一个标记为@transactional的方法中,那么只有一个事务可以跨越所有事务 我认为DAO类不应该有@Transactional注释。将它们放入提供“业务方法”的服务类中。只有那些人知道哪些DAO方法调用(可能来自多个实体)要组合成有意义的事务 另见