Spring-Data JPA:保存引用现有实体的新实体
问题基本上与以下问题相同:
JPA 级联持久化,对分离实体的引用会引发 PersistentObjectException。为什么?
我正在创建一个引用现有分离实体的新实体。现在,当我将此实体保存在我的春季数据存储库中时,会引发异常:
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist
如果我们看一下 spring 数据 JPA 源代码中的 save() 方法,我们会看到:
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
如果我们看一下 isNew() inAbstractEntityInformation
public boolean isNew(T entity) {
return getId(entity) == null;
}
所以基本上,如果我保存()一个新的实体,spring数据将始终调用持久化,因此这种情况总是会失败。(id == null)
这似乎是向集合添加新项时非常典型的用例。
如何解决此问题?
编辑1:
注意:
此问题与如何在Spring JPA中保存引用现有实体的新实体没有直接关系。为了详细说明,假设您收到通过http创建新实体的请求。然后,从请求中提取信息,并创建实体和现有引用的实体。因此,它们将永远是超然的。