使用 spring-data-jpa 和 hibernate 作为 jpa 提供程序时的对象/实体生命周期?

sam*_*ers 3 hibernate jpa spring-data-jpa spring-boot

当使用 spring-data-jpa 和 hibernate 作为 jpa 提供者时,对象/实体生命周期与直接使用 hibernate 或由 hibernate 定义(或者可能是 jpa 规范本身)时相同。

Hibernate 将这些生命周期定义为实体 - Transient, Persistent, Detached, Removed。使用 spring-data-jpa 时这些相同的生命周期也适用吗?如果是这样,下面 Hibernate 提供的方法如何与 spring jpa crud 存储库的方法进行映射。

//below methods in hibernate move an entity to persistent state
save(e), 
persist(e);  
update(e);  
saveOrUpdate(e);  
lock(e);  
merge(e);  
Run Code Online (Sandbox Code Playgroud)

//below methods in hibernate move an entity to detached state
detach(e);  
evict(e);  
Run Code Online (Sandbox Code Playgroud)

Jen*_*der 5

对于问题的第一部分:

Spring Data JPA 只是在 JPA 之上提供了一些舒适的机制。持久性、映射和生命周期仍然由 JPA 或其实现(即您的情况下的 Hibernate)管理。这意味着生命周期是相同的。

Spring Data JPA 方法和 Hibernates/JPA 方法之间的映射见下表。

春季数据 日本PA
CrudRepository.save* 对于新实体EntityManager.persistEntityManager.merge否则
CrudRepository.delete* EntityManager.remove
CrudRepository.findById EntityManager.find*
JpaRepository.*flush EntityManager.flush
JpaRepository.getById EntityManager.getReference

在接口中预定义的其他查询方法或以其他方式使用各种类型的查询。