Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring实体管理器和Spring数据存储库之间的区别是什么?_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Spring实体管理器和Spring数据存储库之间的区别是什么?

Spring实体管理器和Spring数据存储库之间的区别是什么?,spring,jpa,spring-data,spring-data-jpa,Spring,Jpa,Spring Data,Spring Data Jpa,我在一个网站上使用JPA。在探索了保存数据的选项之后,我找到了两种方法。第一种方法是使用javax.persistence.EntityManager的实现。我使用LocalContainerEntityManagerFactoryBean来实例化EntityManager的一个实例。一旦获得EntityManager的实例,我就可以使用它来保存实体。比如说, entityManager.merge(someEntity); aCrudRepository.save(someEntity);

我在一个网站上使用JPA。在探索了保存数据的选项之后,我找到了两种方法。第一种方法是使用javax.persistence.EntityManager的实现。我使用LocalContainerEntityManagerFactoryBean来实例化EntityManager的一个实例。一旦获得EntityManager的实例,我就可以使用它来保存实体。比如说,

entityManager.merge(someEntity);
aCrudRepository.save(someEntity);
另一个选项是使用org.springframework.data.repository.crudepository的实例。首先,我获得了一个crudepository的实例,我可以用它来保存一个实体。比如说,

entityManager.merge(someEntity);
aCrudRepository.save(someEntity);

使用EntityManager和Crudepository将实体持久化到数据库中有什么区别?这两种方法(实体管理器与crud存储库)的优缺点是什么?

这两种接口提供了两种不同的方法:

  • org.springframework.data.repository.crudepository
    是提供CRUD操作的存储库的通用接口
  • javax.persistence.EntityManager
    与持久性关联 上下文Spring有自己的接口,扩展了
    crudepository
    为此目的而呼吁

我希望您了解持久化API的优点或缺点。如果您不知道,您可以阅读的答案。

在Java/Spring中有几个处理持久数据的层:

  • JDBC
  • jdbc模板
  • JPA(包含
    EntityManager
  • Spring数据JPA(包含
    存储库
每一个抽象都会保护开发人员不受低级细节的影响,但它可以 带来自身的复杂性。JdbcTemplate是对普通JDBC的精简抽象。
Repository
是对
EntityManager
的抽象。它保护开发人员免受攻击 通过
EntityManager
引入的一些复杂细节,并添加了样板代码和许多方便的方法


例如,
crudepository
添加了
findAll()
的实现,这种实现非常常见,因此可以对其进行预定义。存储库有许多方便的方法从方法名称(约定优于配置)和实体本身(通过示例查询)生成查询。它们允许在查询DSL中使用漂亮的typesafe Fluent API,或者启用动态投影。

谢谢。根据这个答案,我认为使用实体管理器保存实体和使用存储库保存实体没有区别。因此,如果您使用的是例如CRUDEPository,那么您实际上不需要EntityManager