Spring data jpa如何检查是否执行更新或保存?

viv*_*mar 9 hibernate spring-data-jpa

Spring data jpa 只包含 save 方法,不像 hibernate,我们有 save 和 update 方法。那么spring data jpa如何检查是否更新或保存当前对象。

Abd*_*han 6

Spring data JPA 保存新实体并更新旧实体。Spring data JPA 提供以下策略来检测实体是否是新的。

\n

在此输入图像描述

\n

来自文档

\n
\n

保存实体可以通过\nCrudRepository.save(\xe2\x80\xa6)方法执行。它将使用底层 JPA EntityManager 保留或合并给定的实体。如果实体尚未持久化,Spring Data JPA 将通过调用entityManager.persist(\xe2\x80\xa6) 方法来保存实体,否则\nentityManager.merge(\xe2\x80\xa6) 方法将被调用。

\n
\n

  • 显然,这并没有回答 Spring Data“如何”检查是否更新或保存当前对象的OP。相反,它回答了“Spring Data JPA 做什么”来保存或更新对象。 (2认同)

xyz*_*xyz 2

spring data 自动检测应该创建或更新的内容。例如 SimpleJpaRepository 中的 save 方法的源代码(实现 CrudRepository),以防您的实体实现 Persistable

public <S extends T> S save(S entity) {
    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,需要检查如何处理实体,保存它或根据实体是否是新的进行更新 - 然后保存它。是新检查,只是检查 id 不为空

例如,如果一个实体实现 Persistable :

public boolean isNew() {    
    return null == getId(); 
}
Run Code Online (Sandbox Code Playgroud)