2016-08-19 93 views
0

是否有任何人有删除子记录但未能使用orphanRemoval注释的类似问题?KOTLIN orphanRemoval不起作用

下面是模型类的构造函数我的代码示例:

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

级联的CRUD = arrayOf(CascadeType.ALL)是工作完美,但加时orphanRemoval =真转化为“ONE-TO-MANY”注释,它不能再工作,抛出如下异常:

org.hibernate.HibernateException:与 级联集合=“全删除,孤儿”由所属 实体实例不再被引用:

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

回答

0
@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) 
    } 
0

有一个博客文章,解释什么可能是这种异常的原因:http://www.onkarjoshi.com/blog/188/hibernateexception-a-collection-with-cascade-all-delete-orphan-was-no-longer-referenced-by-the-owning-entity-instance/

您已经通过设置器一个新的集合从而离开原来的收集由父实体未被引用。这对于Hibernate来说并不是很好,并且让它对做什么感到困惑。

booksvar,不val所以我认为在你的代码中的一些地方,你将它设置为需要的值。从博客文章假设推理此处是有效的,使用可变类型的final字段应该是的路要走,

val books: MutableList<BOOK> = mutableListOf()