gpt4 book ai didi

java - hibernate :删除 parent /所有者,同时保持 child 一对一的关系

转载 作者:行者123 更新时间:2023-11-29 05:12:15 25 4
gpt4 key购买 nike

我有两个实体类:UserConfirmation 和 User,它们是一对一的关系,使用以下带注释的代码:

父/所有者实体 (UserConfirmation):

@OneToOne(mappedBy = "userConfirmation", cascade = CascadeType.ALL)
@JsonManagedReference
private User user;

子实体(用户):

@OneToOne
@JoinColumn(name = "user_confirm_id")
@JsonBackReference
private UserConfirmation userConfirmation;

对于当前的 Cascade.ALL,当我删除 UserConfirmation 时,其关联的 User 也会被删除,这是我不希望的。我想在删除 UserConfirmation 后保留用户。

我尝试了以下方法:

  1. 在删除 UserConfirmation 之前将用户设置为 null:userConfirmation.setUser(null); 但这会产生 NullPointerException

  2. 尝试了 Cascade.REMOVE 和 Cascade 上的几乎所有内容,但都不起作用。

一如既往地感谢您的帮助:)

最佳答案

如果不删除所有子端父外键关联,则不能删除

在您的示例中,您说 UserConfirmation 是父级而 User 是子级,但这是不正确的。

父端是独立于另一端存在的一方。在您的情况下,User 应该是 parentUserConfirmation 应该是 child 端。

所以,用户有:

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private UserConfirmation userConfirmation;

级联的是父级entity state transitions给 child 。

而 UserConfirmation 是 child ,但它是所有者端:

@OneToOne
@JoinColumn(name = "user_id")
@JsonBackReference
private User user;

现在您可以删除 UserConfirmation,同时保持 User 不变。

关于java - hibernate :删除 parent /所有者,同时保持 child 一对一的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com