【问题标题】:KOTLIN orphanRemoval not workingKOTLIN orphanRemoval 不起作用
【发布时间】:2016-12-26 03:22:54
【问题描述】:

是否有人有类似的删除子记录但未能使用 orphanRemoval 注释的问题?

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

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

带有 cascade = arrayOf(CascadeType.ALL) 的 CRUD 工作得很好,但是当添加 orphanRemoval = true 进入“ONE-TO-MANY”注解,它不能再工作并抛出异常如下:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    您正在通过 setter 设置新集合,从而使父实体未引用原始集合。这在 Hibernate 中运行得并不好,并且让它不知道该怎么做。

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

    val books: MutableList<BOOK> = mutableListOf()
    

    【讨论】:

      【解决方案2】:
      @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)
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 2020-08-24
        • 2021-11-17
        • 2018-11-20
        • 2021-08-01
        • 1970-01-01
        • 2021-01-12
        相关资源
        最近更新 更多