You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA OneToOne关联场景下,如何删除单表数据不联动删除关联表?

问题

如何删除一个表中的数据而不影响另一个表的数据?例如,我想要删除resume_id为5的数据,该数据关联user_id为12。当前删除resume_id 5时,user_id 12也会被删除,该如何解决?

关联代码如下:

@JsonBackReference(value="resume")
@OneToOne(mappedBy = "userinfo", cascade = CascadeType.REMOVE)
private EntityResume resume;

@JsonManagedReference(value = "resume")
@OneToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "user_id", unique = true)
private EntityUserInfo userinfo;

解决方案

问题根源在于你给关联字段配置了cascade = CascadeType.REMOVE——这个级联规则会让你删除主实体时,自动连带删掉关联的实体。要解决这个问题,只需要调整级联类型即可:

  • 如果你希望删除EntityResume时不删除关联的EntityUserInfo,直接移除EntityResume中userinfo字段的CascadeType.REMOVE,或者保留你实际需要的级联操作(比如CascadeType.PERSIST、CascadeType.MERGE这类不会触发删除的类型)。修改后的代码示例:
@JsonManagedReference(value = "resume")
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "user_id", unique = true)
private EntityUserInfo userinfo;
  • 补充说明:EntityUserInfo中的resume字段是关联关系的被维护端(因为用了mappedBy),这里的CascadeType.REMOVE其实不会生效,级联操作的控制逻辑主要在维护端(也就是EntityResume的userinfo字段)。不过如果后续有其他需求,也可以根据实际情况调整这里的级联配置。

核心逻辑就是:去掉维护端关联字段的CascadeType.REMOVE配置,这样删除resume数据时就不会触发userinfo的删除操作了。

内容的提问来源于stack exchange,提问作者AssylkhanAz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:38:21