Sha*_*zeb 77 spring dao transactions
首先,我可能会问一些之前被问过和回答的问题,但我无法获得搜索结果.好的一般(或总是到目前为止:))我们通常在服务层上定义事务注释典型的spring hibernate crud
控制器 - >经理 - >道 - >奥姆.
我现在有一种情况需要在基于客户端站点的域模型之间进行选择.假设客户端A使用我的域模型一切都很好但是其他客户端站点会给我一个Web服务而不是使用我们的域模型.
我应该替换哪一层.我相信它必须是Dao,它将从Web服务中获取数据并将其发送回来.两个单独编写的Dao图层并根据场景插入.
我现在已经意识到,当我们在服务层中放置@Transactional时,我们一直在进行紧耦合(如果有这样的事情或说没有松耦合).这么多大脑不会错,或者是他们(我对此表示怀疑).
所以问题是"应该在哪里"@Transactional"放置服务层或DAO?" 是服务层向下我应该更换.
Bad*_*dal 69
理想情况下,服务层(Manager)代表您的业务逻辑,因此应使用@Transactional进行注释.
服务层可以调用不同的DAO来执行数据库操作.让我们假设您在服务方法中有3个DAO操作的情况.如果您的第一个DAO操作失败,其他两个可能仍然通过,您将结束不一致的DB状态.注释服务层可以避免这种情况.
hvg*_*des 57
您将希望您的服务是交易性的.如果您的DAO是事务性的,并且您在每个服务中调用不同的DAO,那么您将拥有多个tx,这不是您想要的.使服务调用事务性,并且这些方法内的所有DAO调用都将参与该方法的tx.
i will suggest to put @Transactional in Service layer methods since we can have multiple DAO implementations. by using this we can made our services will be transactional. refer
best practice is to use A generic BasicService to offer common services.
The Service is the best place for putting @Transactional, service layer should hold the detail-level use case behavior for a user interaction that would logically go in a transaction. in this way we can have maintain separation between web application code and business logic.
There are a lot of CRUD applications that don't have any significant business logic, for them having a service layer that just passes stuff through between the controllers and data access objects is not useful. In these cases we can put transaction annotation on Dao.
因此,在实践中,您可以将它们放在任意位置,这取决于您。
通过在服务中进行多个调用,您需要在服务中使用@Transactional。如果将@Transactional置于服务中,则对服务的不同调用将在不同的事务中执行。
归档时间: |
|
查看次数: |
38812 次 |
最近记录: |