springjpa中的通用存储库

springjpa中的通用存储库,spring,spring-data-jpa,repository-pattern,spring-rest,Spring,Spring Data Jpa,Repository Pattern,Spring Rest,我们正在进行一个包含大量DB表的Restful项目。虽然表上的操作几乎相同,主要是INSERT/UPDATE/DELETE/FETCH 我的问题是: 我们是否必须为我们创建的每个实体(域类)创建一个存储库(扩展JpaRepository),或者,是否可以选择创建一个GenericRepository来处理所有实体的所有上述功能? i、 e为所有人建立一个单一的通用报告 如果是这样,您可以分享一个例子吗?对于插入/更新/删除操作,存储库可能非常简单: @Component public class

我们正在进行一个包含大量DB表的Restful项目。虽然表上的操作几乎相同,主要是INSERT/UPDATE/DELETE/FETCH

我的问题是:
我们是否必须为我们创建的每个实体(域类)创建一个存储库(扩展JpaRepository),或者,是否可以选择创建一个GenericRepository来处理所有实体的所有上述功能? i、 e为所有人建立一个单一的通用报告


如果是这样,您可以分享一个例子吗?

对于插入/更新/删除操作,存储库可能非常简单:

@Component
public class CommonRepository {

  @PersistenceContext
  EntityManager em;

  @Transactional
  public <E> E insert(E entity) {
     em.persist(entity);
     return entity;
  }

  @Transactional
  public <E> E update(E entity) {
     return em.merge(entity);
  }

  @Transactional
  public void delete(Object entity) {
     em.remove(entity);
  }

}
@组件
公共类公共存储库{
@持久上下文
实体管理器;
@交易的
公共电子插页(电子实体){
em.persist(实体);
返回实体;
}
@交易的
公共电子更新(电子实体){
返回em.merge(实体);
}
@交易的
公共作废删除(对象实体){
em.remove(实体);
}
}

有关更准确的代码,请参阅

以了解插入/更新/删除操作,例如存储库可能非常简单:

@Component
public class CommonRepository {

  @PersistenceContext
  EntityManager em;

  @Transactional
  public <E> E insert(E entity) {
     em.persist(entity);
     return entity;
  }

  @Transactional
  public <E> E update(E entity) {
     return em.merge(entity);
  }

  @Transactional
  public void delete(Object entity) {
     em.remove(entity);
  }

}
@组件
公共类公共存储库{
@持久上下文
实体管理器;
@交易的
公共电子插页(电子实体){
em.persist(实体);
返回实体;
}
@交易的
公共电子更新(电子实体){
返回em.merge(实体);
}
@交易的
公共作废删除(对象实体){
em.remove(实体);
}
}
有关更准确的代码,请参阅

是否有一个选项可以创建一个
通用存储库
,该存储库可以处理所有实体的所有上述功能

您在考虑这一点时的假设是错误的:您实际上不应该为每个表/实体,而是为每个聚合(根)拥有一个存储库。有关更多详细信息,请参阅

第二:拥有一个通用存储库有点违背了Spring数据JPA的目的,毕竟JPA已经有了一个通用存储库。它被称为
EntityManager
。因此,如果您只需要前面提到的操作,只需注入
EntityManager
就可以了。根本不需要使用Spring数据JPA。如果您想在业务代码和JPA细节之间找到一些东西,可以将其封装在一个简单的存储库中,如所述

最后一点:您将拥有在某处创建所有表的代码。您还将拥有所有实体的代码。你有测试这个的代码。为每个接口定义一个琐碎的接口会成为一个问题吗

是否有一个选项可以创建一个
通用存储库
,该存储库可以处理所有实体的所有上述功能

您在考虑这一点时的假设是错误的:您实际上不应该为每个表/实体,而是为每个聚合(根)拥有一个存储库。有关更多详细信息,请参阅

第二:拥有一个通用存储库有点违背了Spring数据JPA的目的,毕竟JPA已经有了一个通用存储库。它被称为
EntityManager
。因此,如果您只需要前面提到的操作,只需注入
EntityManager
就可以了。根本不需要使用Spring数据JPA。如果您想在业务代码和JPA细节之间找到一些东西,可以将其封装在一个简单的存储库中,如所述


最后一点:您将拥有在某处创建所有表的代码。您还将拥有所有实体的代码。你有测试这个的代码。为每种类型定义一个简单的接口是否会成为一个问题?

Spring Data JPA旨在与少量实体类型一起使用,快速为它们创建存储库。对于公共类型存储库,您可以创建自己的类,从应用程序上下文中获取
EntityManager
,并将插入/更新/删除方法委托给它的
.persist()
.merge()
.remove()
methods为我澄清了很多疑问。关于每个实体都有一个存储库:Spring数据的可能副本JPA用于少量实体类型,可以快速为它们创建存储库。对于公共类型存储库,您可以创建自己的类,从应用程序上下文中获取
EntityManager
,并将insert/update/delete方法委托给它的
.persist()
.merge()
.remove()
方法为消除我的疑虑做了很多工作。关于每个实体都有一个存储库:可能是