Spring数据jpa如何检查是执行更新还是保存?

时间:2017-06-08 19:57:07

标签: hibernate spring-data-jpa

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

4 个答案:

答案 0 :(得分:0)

spring数据自动检测应该创建或更新的内容。 如果你的实体实现了Persistable,那么例如在SimpleJpaRepository中实现save方法的源代码(实现CrudRepository)

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

所以,有一个检查如何处理实体保存或基于实体是否为新更新 - 然后保存它。是新的检查它只是检查id不为空

如果实体实现了Persistable,则为exaple:

public boolean isNew() {    
    return null == getId(); 
}

答案 1 :(得分:0)

使用Spring数据,JPA“save”既可用于更新,也可用于保存,甚至可用于向表中添加新行。

@Transactional
public void UpdateStudent(Student student) {
    this.studentRepository.save(student);
}

例如,此方法使用所有已更改的属性(如果有)保存当前现有学生对象,或者如果学生对象实例是新实例,则将其插入到表中。

一旦方法退出,使用@Transactional注释就会将实例刷新到表中。

Spring数据JPA能够同时执行保存和更新(它们是相同的)并且还插入新行,因为主键是不可变的。

答案 2 :(得分:0)

参考文档详细描述了here

答案 3 :(得分:0)

来自docs

  

可以通过以下方式保存实体   CrudRepository.save(...) - 方法。它将持续或合并给定的   使用基础JPA EntityManager的实体。如果实体没有   已保留但Spring Data JPA将通过调用来保存实体   entityManager.persist(...)方法,否则为   将调用entityManager.merge(...)方法。

Spring Data JPA提供以下策略来检测实体是否为新实体:

enter image description here