springjpa中的通用存储库
我们正在进行一个包含大量DB表的Restful项目。虽然表上的操作几乎相同,主要是INSERT/UPDATE/DELETE/FETCH 我的问题是: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
我们是否必须为我们创建的每个实体(域类)创建一个存储库(扩展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()
方法为消除我的疑虑做了很多工作。关于每个实体都有一个存储库:可能是