@Transactional注解应该放在哪里?

6 浏览
0 Comments

@Transactional注解应该放在哪里?

你应该在DAO类和/或它们的方法中放置@Transactional,还是最好在调用DAO对象的Service类中注释它们?或者在这两个“层”中都注释它们会更有意义?

admin 更改状态以发布 2023年5月20日
0
0 Comments

一般而言,我同意其他人的观点,即事务通常是在服务层上启动的(当然取决于所需的粒度)。

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

我还有一个集成测试,检查所有bean(bean后处理器)是否具有此注解,如果不属于服务层的bean中有一个具有强制传播注解,则测试将失败。这样我就可以确保我们没有在错误的层面上启动事务。

0
0 Comments

我认为事务应该放在服务层中。服务层知道工作单元和用例。如果您有多个DAO注入到一个服务中,需要在单个事务中一起工作,那么这是正确的答案。

0