“@Transactional”应该放在服务层或 DAO 的哪里

2023-11-25

首先,我可能正在问一些以前被问过并回答过的问题,但我无法返回搜索结果。我们在服务层定义事务注释,典型的 Spring Hibernate CRUD 通常是

控制器->管理器->Dao->Orm 。

我现在遇到的情况是,我需要根据客户端站点在域模型之间进行选择。 假设客户端 A 正在使用我的域模型,一切都很好,但其他客户端站点会给我提供 Web 服务,而不是使用我们的域模型。

我应该更换哪一层。我相信它必须是 DAO,它将从 Web 服务获取数据并将其发送回来。即两个单独编写的 DAO 层并根据场景插入。

我现在意识到,当我们把@Transactional在服务层。这么多的大脑不可能是错的,或者确实是这样(我对此表示怀疑)。

所以问题是“应该在哪里”@Transactional“应该放在Service层还是DAO?”我应该更换它是向下的服务层吗?


十一年过去了,仍然具有现实意义。如果我回顾这个项目,我当时对领域模型的理解显然是错误的。我将 ORM 层视为域模型,我们希望使用 ORM 和分离的实体,并且没有任何数据映射,也没有任何 DTO。这就是当时的趋势。如今,域模型不再是 ORM,拥有适当的域模型并使用 ORM 或 Web 服务作为数据源可以解决此问题。就像许多人指出的那样,服务是它的正确位置,并且具有适当的领域模型,并且不将 JPA (ORM) 视为领域模型。


理想情况下,服务层(Manager) 代表您的业务逻辑,因此应该用@Transactional.

服务层可能会调用不同的DAO来执行DB操作。让我们假设一个服务方法中有 3 个 DAO 操作的情况。如果您的第一个 DAO 操作失败,其他两个操作可能仍会通过,并且您最终将得到不一致的数据库状态。注释服务层可以帮助您避免这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“@Transactional”应该放在服务层或 DAO 的哪里 的相关文章

随机推荐