@Transactional注释属于何处?

2022-08-31 04:18:12

是否应将 放在类和/或其方法中,还是最好对使用 DAO 对象调用的服务类进行注释?或者注释两个“层”是否有意义?@TransactionalDAO


答案 1

我认为交易属于服务层。它是了解工作单元和用例的人。如果您将多个DAO注入到需要在单个事务中协同工作的服务中,那么这是正确的答案。


答案 2

总的来说,我同意其他人的说法,即事务通常是在服务级别上启动的(当然取决于你需要的粒度)。

但是,与此同时,我也开始添加到我的DAO层(以及其他不允许启动事务但需要现有事务的层),因为更容易检测到忘记在调用方(例如服务)中启动事务的错误。如果您的 DAO 使用强制传播进行注释,您将收到一个异常,指出在调用该方法时没有活动事务。@Transactional(propagation = Propagation.MANDATORY)

我还有一个集成测试,我检查所有bean(Bean后处理器)的这个注释,如果在不属于服务层的bean中存在一个传播不是强制性的注释,则失败。通过这种方式,我可以确保我们不会在错误的层上启动事务。@Transactional


推荐