在 JPA 中,每个表应该有一个存储库吗?

2022-08-31 19:57:57

在 JPA 中,每个表应该有一个存储库吗?如果没有,如何解析存储库数据库中的泛型?

例如,下面是一个 .它处理对象上的 CRUD 操作。如果我希望存储库也保存一个对象,我将如何更改下面的界面以容纳这两个对象?StoreRepositoryStoreStoreEvent

@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
    public Store findByGuid(String guid);
}

答案 1

由于存储库是源自域驱动设计的概念,因此考虑数据库表是错误的方法。根据定义,您可以从存储库访问聚合根。实际上,存储库正在模拟这些的集合。

现在,什么形成了聚合根?可能更有趣的是:什么没有?当然,这在很大程度上取决于您的域名,但让我在这里给您举个例子。包含通常被建模为聚合根。这是由于.如果没有周围的环境,A就不会存在。OrderLineItemsOrderLineItemOrder

通常,持久性访问机制应遵循域原则。因此,您可以将两者都建模并作为类进行建模,但只创建一个 ,因为它们构成了聚合根并有效地控制对象图中的一致性规则。OrderLineItem@EntityOrderRepository

我们还强烈建议不要使用特定于存储存储库的基本接口,因为顾名思义,它们会向客户端公开存储细节(例如),如果可能的话,他们不应该知道。在这里阅读我的答案中的更多信息。flush()


答案 2

推荐