Spring实体管理器和Spring Data Repository之间有什么区别?

zfr*_*cus 32 spring jpa spring-data spring-data-jpa

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

entityManager.merge(someEntity);
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用org.springframework.data.repository.CrudRepository的实例.一,我获得了一个CrudRepository的实例,我可以用它来保存一个实体.例如,

aCrudRepository.save(someEntity);
Run Code Online (Sandbox Code Playgroud)

使用EntityManager和CrudRepository将实体持久化到数据库之间有什么区别?这两种方法(实体管理器与crud存储库)有什么好处或坏处?

bsi*_*nau 20

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

  • org.springframework.data.repository.CrudRepository 是提供CRUD操作的存储库的通用接口.
  • javax.persistence.EntityManager与持久化上下文相关联.Spring有自己的界面延伸CrudRepository 呼吁JpaRepository为这个目的.

我希望您了解持久API的优缺点.如果你不这样做,你可以阅读这个问题的答案.

  • 谢谢。从这个答案中,我认为使用实体管理器或存储库保存实体没有什么不同。 (2认同)

Jan*_*nar 6

在Java / Spring中,处理持久性数据有几层:

  • JDBC
  • Jdbc模板
  • JPA(包含EntityManager
  • Spring Data JPA(包含Repository

每个抽象都可以使开发人员免受某些爱好者级别的细节的影响,但它可以带来自己的复杂性。JdbcTemplate是纯JDBC的精简抽象。 Repository是的抽象EntityManager。它使开发人员免受引入的某些复杂细节的影响,EntityManager并增加了样板代码和许多便捷的方法。

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