@Transactional注释在哪里?| Java Debug 笔记

40 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

@Transactional注释在哪里?

您应该将放置@Transactional在DAO类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?还是注释两个“层​​”是否有意义?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

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

高分回答:

总的来说,我同意其他人的说法,即事务通常是在服务级别上开始的(当然,这取决于您所需的粒度)。

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

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

高分回答:

事务性注释应放在所有不可分割的操作周围。

例如,您的呼叫是“更改密码”。这包括两个操作

修改密码。
审核更改。
向客户端发送密码已更改的电子邮件。

因此,在以上内容中,如果审核失败,那么密码更改是否也将失败?如果是这样,则事务应该在1和2左右(因此在服务层)。如果电子邮件失败(可能应该对此进行某种故障保护,这样就不会失败),那么它应该回滚更改密码和审核吗?

这些是在确定放置位置时需要问的问题@Transactional

翻译原文: kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️