如果我有一个基本的 Dao 类,标记为 @Transactional
在类级别,这将导致 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();
}
}
如果它被包装,您会认为拥有 @Transactional
是一个很好的做法吗?通用 Dao 类上的注释,以便 dao 可以直接用作 @Autowired BaseDao<Person>
管理 CRUD 操作?并且仅在需要时创建外观来包装需要在单个事务中运行的多个 CRUD 调用?
或者我应该更好地从基础 dao 中删除该事务?
最佳答案
如果将这两个调用包装到一个也标记为 @Transactional 的方法中,那么将只有一个事务来跨越所有内容。
我认为 DAO 类不应该有 @Transactional 注释。将它们放入提供“业务方法”的 Service 类中。只有那些人才能知道调用哪个 DAO 方法(可能来自多个实体)来组成有意义的事务。
关于java - 将交易包装在现有的交易方法之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21450926/