【问题标题】:can i use two repository in the same service?我可以在同一个服务中使用两个存储库吗?
【发布时间】:2017-06-15 23:10:00
【问题描述】:

我的 service.Impl 类:

 @Service
 public class HevenServiceImpl implements IHevenService     {
 /*
  * 
  * Injecting DAO
  */
 @Resource
 private HevenRepositoryDAO  repository;
 @Resource
 private DecompteRepositoryDAO repository2;

有什么影响?我们可以得到dirty-read问题吗!!?

【问题讨论】:

    标签: java sql spring oracle spring-data


    【解决方案1】:

    从字面上看,我们为每个服务类使用一个存储库。有关示例实例,请查看下面的代码。

    @Service
    public class SessionServiceImpl implements SessionService {
        @Autowired
        private SessionRepository sessionRepository;
    } 
    

    为什么你不能在这里遵循同样的原则。是什么阻止你这样做。因为这可能是您的应用程序中的设计缺陷。如果您使用 JPA 成功映射类之间的关系,您应该能够坚持这种方式。如果您可以向我展示您的域类,我可以帮助您使用 JPA 映射它们,以便您最终使用我在此处提到的方式。希望这可以帮助。快乐编码!

    【讨论】:

      【解决方案2】:

      技术上是的,你可以!但是你应该遵循单一责任原则。这意味着,不要让你的服务层知道存储库,而是在两者之间有一些管理层(比如 ServiceManager)。 ServiceManager 将调用不同的类集(比如 RepoManager)。每个 RepoManager 处理一个存储库并公开功能来执行所有低级别的事情(可以在此处处理带有事务管理、重试、缓存等的 CRUD 操作)。您的 ServiceManager 应该处理多个 RepoManager 并具有业务逻辑。服务实现。应该只将调用委托给适当的管理器,并且可以做一些其他的事情,比如在单个地方处理异常等。这意味着很多额外的类,这在相当简单的组件中不值得,但随着应用程序/组件的增长而增加了很多价值。使用您自己的判断来至少将服务层与存储库分开。

      【讨论】:

      • 当然可以。对我来说,我遵循了架构的逻辑:- HevenEntity->HevenRepo->HevenService->HevenServiceImpl - DecompteEntity->DecompteRepo->DecompteService->DecompteServiceImpl。在我的过程中,我需要在创建 heven 的同时创建一个 decompte,所以在 HevenServiceImpl 我注入 DecompteService 。我问了 Qte,因为我读了一篇关于如何在同一个事务中使用两个存储库会导致脏读问题的文章!如果是真的,我寻求解释!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2011-02-21
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      相关资源
      最近更新 更多