为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Data 映射无法按预期工作

Spring Data 映射无法按预期工作

慕尼黑5688855 2021-06-07 17:39:19
我有一个带有两个外键和多对一关联(到表checkpoint和setting)的表选项:db schema。从 JPA 方面,我有 2 个双向关联:一方面是 Cascade.ALL和FetchType.EAGER,另一方面是Cascade.REMOVE。这是相应的 JPA 映射:@Entity@Table(name = "checkpoint")@AllArgsConstructor@NoArgsConstructor@Datapublic class Checkpoint {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private long id;  private long location;  @OneToMany(mappedBy = "checkpoint",        cascade = CascadeType.ALL,        orphanRemoval = true,        fetch = FetchType.EAGER)  private List<RewardOption> rewardOptions = new ArrayList<>();}@Entity@Table(name = "setting")@AllArgsConstructor@NoArgsConstructor@Datapublic class RewardSetting {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private long id;  @Column(name = "base_line")  private long baseLine;  @OneToMany(mappedBy = "rewardSetting",        cascade = CascadeType.REMOVE,        orphanRemoval = true)  private List<RewardOption> rewardOptions = new ArrayList<>();}@Entity@Table(name = "option")@AllArgsConstructor@NoArgsConstructor@Datapublic class RewardOption {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private long id;  private long weight;  @ManyToOne  @JoinColumn(name = "setting_id")  private RewardSetting rewardSetting;  @ManyToOne  @JoinColumn(name = "checkpoint_id")  private Checkpoint checkpoint;} 此外,我正在使用 Spring Data 进行实体操作。对我来说,这似乎是一个有效的例子,但在我表演时的练习中:...rewardSettingRepository.delete(rewardSetting);或者:...rewardSettingRepository.delete(id);我让 JPA 尝试在选项表中的相应行之前从设置表中删除一行。有没有人有一些想法为什么它会这样?为什么这种映射会导致这种行为?如何正确地做到这一点?
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

要使其工作,您需要同步双向关联的两端

这意味着,在调用 delete 之前,您需要确保将父实体与所有子实体分离。


查看完整回答
反对 回复 2021-06-17
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信