我在网站上使用JPA。在探索了保存数据的选项后,我找到了2种方法。第一种方法是使用javax.persistence.EntityManager的实现。我使用LocalContainerEntityManagerFactoryBean来实例化EntityManager的实例。一旦我获得了EntityManager的实例,我就可以用它来保存实体。例如,
entityManager.merge(someEntity);
另一种选择是使用org.springframework.data.repository.CrudRepository的实例。一,我获得了一个CrudRepository的实例,我可以用它来保存一个实体。例如,
aCrudRepository.save(someEntity);
使用EntityManager和CrudRepository将实体持久化到数据库之间有什么区别?这两种方法(实体管理器与crud存储库)有什么好处或缺点?
答案 0 :(得分:19)
这两个界面提供了两种不同的方法:
org.springframework.data.repository.CrudRepository
是提供CRUD操作的存储库的通用接口。javax.persistence.EntityManager
与持久性相关联
上下文。 Spring有自己的接口,扩展CrudRepository
为此目的称为JpaRepository
。我希望您了解持久API的优缺点。如果不这样做,您可以阅读this question的答案。
答案 1 :(得分:0)
在Java / Spring中,处理持久性数据有几层:
EntityManager
)Repository
)每个抽象都可以使开发人员免受某些爱好者级别的细节的影响,但是它可以
带来自己的复杂性。 JdbcTemplate是纯JDBC的精简抽象。
Repository
是对EntityManager
的抽象。它使开发人员免受
EntityManager
引入了一些复杂的细节,并增加了样板代码和许多便捷的方法。
例如,CrudRepository
添加了findAll()
的实现,这种实现是如此普遍,以至于可以预定义它。存储库具有许多方便的方法,可从实体本身(通过示例查询)根据方法名称(通过配置进行约定)生成查询。它们允许在查询DSL中使用漂亮的类型安全Fluent API,或者启用动态投影。