Hibernate:删除父级/所有者,同时保持子级一对一的关系

Ton*_*yGW 2 java hibernate jpa cascade hibernate-mapping

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

父/所有者实体(用户确认):

@OneToOne(mappedBy = "userConfirmation", cascade = CascadeType.ALL)
    @JsonManagedReference
    private User user;
Run Code Online (Sandbox Code Playgroud)

子实体(用户):

@OneToOne
@JoinColumn(name = "user_confirm_id")
@JsonBackReference
private UserConfirmation userConfirmation;
Run Code Online (Sandbox Code Playgroud)

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

我尝试过以下方法:

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

  2. 尝试了 Cascade.REMOVE 和 Cascade 上的几乎所有内容,但没有一个有效。

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

Vla*_*cea 5

如果不删除所有子端父级外键关联,则无法删除父级。

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

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

所以,User有:

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private UserConfirmation userConfirmation;
Run Code Online (Sandbox Code Playgroud)

父级将实体状态转换级联到子级。

UserConfirmation 是子方,但它是所有者方:

@OneToOne
@JoinColumn(name = "user_id")
@JsonBackReference
private User user;
Run Code Online (Sandbox Code Playgroud)

现在您可以删除一些,UserConfirmation同时保留User不受影响的部分。