Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将事务包装到现有的事务方法上?_Java_Spring - Fatal编程技术网

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方法调用(可能来自多个实体)要组合成有意义的事务

另见