Manager->D-6ren">
gpt4 book ai didi

spring - "@Transactional"应该放在哪里服务层或者DAO

转载 作者:IT老高 更新时间:2023-10-28 13:01:28 25 4
gpt4 key购买 nike

首先,我可能会问一些以前被问过和回答过的问题,但我无法得到搜索结果。我们在服务层上定义事务注释,典型的 spring hibernate crud 通常是

Controller->Manager->Dao->Orm .

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

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

我现在意识到,当我们将 @Transactional 放在 Service 层时,我们一直在做紧耦合(如果有这样的事情或者说没有松耦合)。这么多的大脑不可能是错的,或者他们是错的(我怀疑)。

所以问题是“应该将“@Transactional”放置在服务层还是 DAO 的位置​​?”我应该更换向下的服务层吗?


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

最佳答案

理想情况下,服务层 (Manager) 代表您的业务逻辑,因此应使用 @Transactional 进行注释。

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

关于spring - "@Transactional"应该放在哪里服务层或者DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886909/

25 4 0