当前位置: 首页 > 知识库问答 >
问题:

KOTLIN孤儿移除不起作用

邹锦
2023-03-14

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

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

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

cascade=arrayOf(CascadeType.All)的CRUD工作正常,但当将OlphanRemove=true添加到“一对多”注释中时,它无法继续工作,并抛出如下所示的异常:

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

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

共有1个答案

宓和同
2023-03-14

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

您正在通过setter设置一个新的集合,从而使原始集合不被父实体引用。这不适合Hibernate,使它不知道该做什么。

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

val books: MutableList<BOOK> = mutableListOf()
 类似资料:
  • 问题内容: 我在使用具有以下映射的JPA删除孤立节点时遇到问题 我遇到了孤立角色挂在数据库周围的问题。 我可以使用特定于注释的Hibernate标记,但是显然我不想将解决方案绑定到Hibernate实现中。 编辑 :似乎JPA 2.0将包括对此的支持。 问题答案: 如果将它与Hibernate一起使用,则必须显式定义批注,该批注可与JPA结合使用。 如果您不打算使用Hibernate,则必须先明确

  • 有人知道我为什么会有这种行为吗?是我的代码出了bug还是什么问题?

  • 最近,我问了一个关于堆栈溢出的非常类似的问题,这是另一个问题的重复。在另一个问题中,我采用了一种变通方法,解决了我的问题。现在,这一次解决方案不起作用,所有其他提到的解决方案都不起作用。此外,链接到第一个线程的其他线程的所有解决方案都不起作用。 这是我最初的问题: SQLServerException:无效的列名 这就是重复: Hibernate列名问题 我已经检查了链接和相关部分右侧的主题,但找

  • 孤儿进程概念 我们经常听别人说到孤儿进程(Orphan Process),究竟是什么呢,现在我们一次理解透。 根据维基百科的解释,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。 孤儿进程与僵尸进程是完全不同的,后面会详细介绍僵尸进程。而孤儿进程借用了现实中孤儿的概念,也就是父进程不在了,子进程还在运行,这时我们就把子进程的PPID设为1。前面讲PID提到,操作系统会创建进程号为1

  • 客户端版本:version.info{Major:“1”,Minor:“0”,GitVersion:“V1.0.4”,GitCommit:“65D28D5FD12345592405714C81CD03B9C41D41D9”,GitTreesteat:“Clean”} 服务器版本:version.info{Major:“1”,Minor:“2”,GitVersion:“V1.2.0”,GitComm