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

JPA CascadeType.All未删除儿童孤儿记录

张鸿宝
2023-03-14
    @NotNull
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "parentPost") 
private Set<Comment> commentList;
    @ManyToOne
    @JoinColumn(name="parent_id")
    @JsonBackReference
    private Post parentPost;    

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

共有1个答案

黄弘新
2023-03-14

可能是语句顺序错误。

假设:

// find a post and manage it
Post managedPost = em.find(postId); 

// get a random comment - the first one
Comment comment = managedPost.getCommentList().iterator().next();

// unlink the comment from the post
managedPost.getCommentList().remove(comment);

// remove the comment from the db
em.remove(comment);

// do other things
....

// do an useless merge on a already managed post
em.merge(managedPost);

提供者将缓存语句(只是一个概念,不要把它们当作真实的):

    null
 类似资料:
  • 我有三种模式:有许多有许多。当我删除一个用户时,我希望自动删除他所有相关的帖子以及与这些帖子相关的评论。为了实现这一点,我在和模型中有以下代码: 当我删除一个用户时,他的所有帖子都会被删除,但是评论会被保留。为什么会发生这种情况?

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

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

  • 客户端版本: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

  • 我试图收集以下信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三种注释中的一种:或或。 我对第三个有点困惑:,因为教义官方留档中关于这个的解释非常少),我希望有人能证实我从我的研究中收集和理解的以下信息网络和经验... 它有什么作用? == 应用于收集(因此在或关系中) == ORM中的实施 可与、或 == 这个策略有点棘手,但可能非常强大和快速。(参考官方文件,但尚未阅读更多解释

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