的问题基本上是相同的,如下一个:弹簧数据的JPA:保存新的实体引用现有
JPA cascade persist and references to detached entities throws PersistentObjectException. Why?
我创建引用现有的,分离的一个新的实体。现在,当我保存这个实体在我的春天数据存储库将抛出一个异常:
org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist
如果我们看一下在春天数据JPA的源代码保存()方法中,我们看到:
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
和如果我们在AbstractEntityInformation
public boolean isNew(T entity) {
return getId(entity) == null;
}
看是否新款()所以基本上,如果我救()一个新的实体(id == null)
,春季数据将始终坚持打电话,因此该方案将ALW ays失败。
这似乎是向集合添加新项目时非常典型的用例。
我该如何解决这个问题?
编辑1:
注:
这个问题不直接关系到How to save a new entity that refers existing entity in Spring JPA?。详细说明假设你得到通过http创建新实体的请求。然后从请求中提取信息并创建您的实体和现有的实体。因此他们将永远被分离。
卡住相同的情况..任何解决方案? – raksja
不,不是真的......当然,您可以处理异常,然后先创建(保留)新对象,并在保留新对象后添加引用。但是,这并不适用于所有情况... –
另一种选择是确定我们是否处于这种状态:'entity.getId()== null && entity.getReferencedEntity()。getId()!= null',如果为true从数据库加载引用的实体。 –