【发布时间】:2014-01-30 08:10:44
【问题描述】:
如果我有一个在类级别上标记为@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();
}
}
如果它被包装,您是否认为在通用 Dao 类上使用 @Transactional 注释是一个好习惯,以便可以直接将 dao 用作 @Autowired BaseDao<Person> 来管理 CRUD 操作?并且仅在需要时创建封装多个需要在单个事务中运行的 crud 调用的外观?
或者我应该更好地从基础 dao 中删除该事务?
【问题讨论】: