Spring数据jpa只包含与hibernate不同的save方法,我们有保存和更新方法。那么spring数据jpa如何检查是否更新或保存当前对象。
答案 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提供以下策略来检测实体是否为新实体: