我可以在同一个服务中使用两个存储库吗?

时间:2017-01-30 17:31:11

标签: java sql spring oracle spring-data

我的service.Impl类:

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

有什么影响?我们可以得到脏读问题!!?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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