gpt4 book ai didi

java - 您是否应该在 JPA 中的每个表都有一个存储库?

转载 作者:IT老高 更新时间:2023-10-28 21:18:53 24 4
gpt4 key购买 nike

您是否应该在 JPA 中为每个表创建一个存储库?如果不是,如何解析存储库数据库中的泛型?

例如,下面是一个 StoreRepository。它处理 Store 对象上的 CRUD 操作。如果我希望存储库也保存 StoreEvent 对象,我将如何更改下面的接口(interface)以容纳这两个对象?

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

最佳答案

因为存储库是源自 Domain Driven Design 的概念,考虑数据库表是错误的做法。根据定义,您可以从存储库访问聚合根。实际上,存储库正在模拟这些的集合。

现在什么形成聚合根?可能更有趣:什么不是?当然,这高度依赖于您的域,但让我在这里举个例子。包含 LineItemsOrder 通常被建模为聚合根。这是由于 Order 的组合性质造成的。如果没有周围的 Order,则 LineItem 将不存在。

通常持久性访问机制应该遵循领域原则。因此,您可以将 OrderLineItem 建模为 @Entity 类,但只创建一个 OrderRepository,因为它们形成聚合根,有效控制对象图中的一致性规则。

我们还强烈建议不要使用商店特定的存储库基础接口(interface),因为它们 - 顾名思义 - 公开商店细节(例如 flush()) 发送给他们不应该知道的客户,如果可能的话。在我的回答中阅读更多信息 here .

关于java - 您是否应该在 JPA 中的每个表都有一个存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com