KOTLIN orphanRemoval不工作

时间:2016-08-19 04:14:59

标签: hibernate spring-boot kotlin spring-data-jpa

是否有人有类似的问题删除子记录但未使用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工作正常,但添加 orphanRemoval = true < / strong>进入“ONE-TO-MANY”注释,它无法再工作并抛出异常,如下所示:

  

org.hibernate.HibernateException:一个集合   所有者不再引用cascade =“all-delete-orphan”   实体实例:

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

2 个答案:

答案 0 :(得分:0)

有一篇博客文章解释了导致此类异常的原因:http://www.onkarjoshi.com/blog/188/hibernateexception-a-collection-with-cascade-all-delete-orphan-was-no-longer-referenced-by-the-owning-entity-instance/

  

您正在通过setter设置新集合,从而使原始集合不会被Parent实体取消引用。这与Hibernate的搭配并不顺利,让人不知道该做些什么。

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

val books: MutableList<BOOK> = mutableListOf()

答案 1 :(得分: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)
    }