KOTLIN orphanRemoval无效

是否有任何人删除子记录的类似问题,但没有使用orphanRemoval注释?

以下是我在Model Class构造函数中的代码示例:

@OneToMany(orphanRemoval = true, cascade = arrayOf(CascadeType.ALL)) @JoinColumn(name = "categoryId", nullable = false) var books: List<BOOK> = emptyList() 

使用cascade = arrayOf(CascadeType.ALL)的CRUD是完美的工作,但是当在“ONE-TO-MANY”注释中添加orphanRemoval = true时,它不能再工作,抛出如下异常:

org.hibernate.HibernateException:具有cascade =“all-delete-orphan”的集合不再由拥有的实体实例引用:

添加orphanRemoval从数据库中永久删除子记录的目的。

有一篇博客文章解释了这种例外的原因: http : //www.onkarjoshi.com/blog/188/hibernateexception-a-collection-with-cascade-all-delete-orphan-was-no-longer参考的,由这拥有实体实例/

您正在通过setter设置一个新的集合,从而留下Parent实体未引用的原始集合。 这与Hibernate不能很好地兼容,并且让它对做什么感到困惑。

booksvar ,不是val所以我认为在你的代码的某个地方,你将它设置为所需的值。 假设博客文章的推理在这里是有效的,那么使用可变类型的final字段应该是可行的,

 val books: MutableList<BOOK> = mutableListOf() 
 @OneToMany(cascade = arrayOf(CascadeType.ALL), orphanRemoval = true, fetch = FetchType.EAGER) @JoinColumn(name = "categoryId", nullable = false) var books: MutableList<BOOK> = mutableListOf() set(value) { field.clear() field.addAll(value) }