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 也会被删除,这是我不希望的。我想在删除用户确认后保留用户。
我尝试过以下方法:
在删除 UserConfirmation 之前将用户设置为 null:userConfirmation.setUser(null);但这会产生 NullPointerException
尝试了 Cascade.REMOVE 和 Cascade 上的几乎所有内容,但没有一个有效。
一如既往地感谢您的帮助:)
如果不删除所有子端父级外键关联,则无法删除父级。
在您的示例中,您说 是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不受影响的部分。