在一组一对多关联管理中,我的需求是原来一个项目中有3个图片信息,我现在删掉2个 把剩下的1个图片对象和项目信息一起传给项目的Repository.save,我想要的结果是我其他2个图片信息的外键值置空,只留我要保存的那一个,然而一开始我的关联关系设置成如下:
@ApiModelProperty(value = "点检项目") @ManyToOne(cascade={CascadeType.ALL} optional=false)//,fetch = FetchType.EAGER, @NotFound(action = NotFoundAction.IGNORE) @Where(clause = "delete_flag=0") @JoinColumn(name = "r_id",referencedColumnName = "id") @JsonIgnoreProperties("equipInstDetailRecordPics") private FtpmEquipInstDetailRecord equipInstDetailRecord
/** *点检项拍照 * **/ @OneToMany(cascade={CascadeType.DETACH}, mappedBy = "equipInstDetailRecord")//fetch = FetchType.LAZY,orphanRemoval = true @Where(clause="delete_flag=0") @JsonIgnoreProperties("equipInstDetailRecord") // @JSONField(serialize = false) private List<FtpmEquipInstDetailRecordPic> equipInstDetailRecordPics;
很神奇的结果是 把我传的要保存的对象的外键置空了,其他的数据和外键反而还在,和我的需求刚刚相反。
然后一番尝试后把@ManyToOne里面的属性注释掉,然后在@OneToMany(cascade={CascadeType.PERSIST}, fetch = FetchType.LAZY, mappedBy = "equipInstDetailRecord")设备成这样的时候对多图片数据便不做任何操作,成功第一步,主要是CascadeType.PERSIST维护了更新数据,然后再加上orphanRemoval = true表示当移除了实体的关系的时候,会自动删除对应的实体 就达到了一开始的目标需求,只是把多的数据直接删除了 而不是仅对外键置空