JPA 中的每个表是否应该有一个存储库?如果没有,如何解析存储库数据库中的泛型?
例如,下面是一个StoreRepository
。它处理CRUD上的操作Store
目的。如果我想让存储库保存一个StoreEvent
对象也是如此,我将如何更改下面的界面以适应这两个对象?
@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
public Store findByGuid(String guid);
}
由于存储库是一个源自于的概念领域驱动设计,考虑数据库表是错误的方法。根据定义,您可以从存储库访问聚合根。实际上,存储库正在模拟这些的集合。
那么什么形成了聚合根呢?也许更有趣的是:什么不是?当然,这高度依赖于您的域,但让我在这里给您举一个例子。一个Order
含有LineItems
通常被建模为聚合根。这是由于其组成性质造成的Order
. A LineItem
没有周围环境就不会存在Order
.
通常持久性访问机制应该遵循域原则。因此,您可以对两者进行建模Order
and LineItem
as @Entity
类但只创建一个OrderRepository
,因为它们形成聚合根并有效地控制对象图中的一致性规则。
We also strongly推荐not使用存储特定存储库基本接口,因为它们 - 顾名思义 - 公开存储细节(例如flush()
)如果可能的话,向他们不应该知道的客户。在我的回答中阅读更多相关内容here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)