class Attribute{
--- other entity def
@OneToMany(fetch=FetchType.LAZY, orphanRemoval=true, cascade=CascadeType.ALL)
@JoinColumn(name="ATTRDEFID", nullable=false, insertable=false , updatable=false)
@OrderBy("IDX")
private List<Constraint> constraints = new ArrayList<Constraint>();
--- other entity def
}
在更新/保存属性时,禁令为空。仅在更新的情况下抛出此错误。
org.springframework.orm.jpa.JpaSystemException:拥有实体实例不再引用具有cascade =“all-delete-orphan”的集合:com.revitas.cm.persistence.term.Attribute.constraints;嵌套异常是org.hibernate.HibernateException:拥有实体实例不再引用cascade =“all-delete-orphan”的集合:com.revitas.cm.persistence.term.Attribute.constraints
当我设置空集合而不是null时,它已成功保存。
if(attribute.getConstraints()==null){
attribute.setConstraints(new ArrayList<>());
}
为什么抛出这样的错误?为什么通过空集合解决了?它是否正确解决方案? 我用谷歌搜索this。但没有弄清楚为什么会出现这样的问题。
答案 0 :(得分:0)
问题在于包含空约束的属性,并且称为更新的合并操作。
根据hibernate提供的此链接https://hibernate.atlassian.net/browse/HHH-7726。
通过parent.setChildren(null)删除子项,然后使用session.merge(parent)提交更改抛出org.hibernate.HibernateException:使用cascade =&#34; all-delete-orphan&#34;的集合所拥有的实体实例不再引用:Parent.children
要么设置空集合,要么在json时不传递值。 Json输入将有两种方式:
1)[]
2)没有传递元素。