当前位置: 首页 > 知识库问答 >
问题:

Spring JPA中的通用存储库

姚凯歌
2023-03-14

我们正在研究一个包含大量DB表的Restful项目。虽然对这些表的操作几乎相同,主要是插入/更新/删除/提取(insert/update/delete/fetch)。

我的问题是:
我们是否必须为我们创建的每一个实体(域类)创建一个存储库(扩展JpaRepository),或者,有一个选项可以为所有实体创建一个能够处理上述所有功能的GenericRepository?即为所有人提供一个单一的GenericRepository。

如果是的话,你能分享一个例子吗?

共有1个答案

慕健
2023-03-14

是否有一种选择,可以创建一个genericrepository来处理所有实体的上述所有功能?

您是在一个错误的假设下看待这个问题的:您实际上不应该每个表/实体都有一个存储库,而是每个聚合(根)都有一个存储库。请参见JPA中的每个表应该有一个存储库吗?了解更多详情。

第二:拥有一个泛型存储库有悖于Spring Data JPA的目的,毕竟,JPA已经有了一个泛型存储库。它称为EntityManager。因此,如果您只需要您提到的操作,只需要注入EntityManager就可以了。根本不需要使用Spring Data JPA。如果您希望在业务代码和JPA细节之间有一些东西,您可以将其包装在一个简单的存储库中,如@AlexSalaUyou所述。

最后一点:您将拥有在某个地方创建所有表的代码。您还将获得所有实体的代码。你有测试这个的代码。为每个接口定义一个简单的接口会有问题吗?

 类似资料:
  • 我见过存储库模式的各种用法。我倾向于一种我很少看到的模式,我想知道这是否有充分的理由。 例子: 利益 构造函数将是内部的,只能通过工厂模式访问,所以我不担心这里的复杂性。 IPerson 强制实现 Save() 方法,但教师不需要知道它是如何持久化的 工作原理类似于实体框架代理对象 我可以在 Iperson 对象上调用 Save(),而无需知道它是老师 应用- 欺骗 > 业务对象不再是普通的旧C#

  • 我正在构建一个具有多个租户(即客户)的企业应用程序(SaaS)。同一函数的不同客户之间的数据存储在同一个表中,我使用一个名为“site_id”的列来定义数据的所有权。它看起来像这样: 在每个请求中,过滤器处理会话信息,以确定该用户可以访问哪个站点。这些数据存储在一个静态线程局部变量中,该变量可以从名为< code>Set的静态方法中检索 现在,对于自动创建的存储库的“findAll”查询,它们还将

  • 问题内容: 我试图通过数据库链接调用存储过程。代码看起来像这样: 当我从package_name所属的相同数据库实例和模式运行此程序时,我可以很好地运行它。但是,当我通过数据库链接运行它((对存储的过程名称进行必要的修改等)时,我得到一个oracle错误:ORA-24338:语句句柄未执行。 此代码在dblink上的修改后的版本如下所示: 问题答案: 关于另一个问题,我记得package_name

  • 以下是我的模型:- 我的存储库和服务:- 控制器:- org.springframework.beans.factory.beanCreationException:创建类路径资源[org/springframework/boot/autocconfigure/orm/jpa/hibernatejpaconfiguration.class]中定义的名为“Entity ManagerFactory”

  • 我正在尝试将通用Jpa规范与Spring启动一起使用,但出现了这个问题。 在我的代码中,我试图使用模块概念,所以我有5个模块(实体、dao、服务、web和前端,带角度),所以这是我的代码: 我的通用Jpa规范接口。 存储库示例。 服务 和控制器

  • 我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样: 当我尝试运行我的代码时,它的返回 org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boo