问题描述
将对象A的级联属性,赋值给对象B的级联属性,保存对象B后,对象A的级联属性数据会被删除
问题出现的环境背景及自己尝试过哪些方法
jdk 11
springboot 2.4.5
相关代码
对象A有级联属性
@Entity
public class ProcessTemplate {
@Id
private String uuid
...
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Customer> preHandler;
}
对象B有相同级联属性
@Builder
@Entity
public class ProcessInstance {
...
@ManyToMany(cascade = CascadeType.All, fetch = FetchType.LAZY)
private Set<Customer> preHandler;
}
我想将对象A的级联属性,赋值给B的级联属性并保存
var processTemplateList =
this.processTemplateRepository.findAll();
for (var it : processTemplateList) {
this.processInstanceRepository.save(
ProcessInstance.builder()
...
//A对象级联属性,赋值给B对象级联属性
.preHandler(it.getPreHandler())
.build());
}
执行后的sql日志
//保存B对象(没问题)
insert into process_instance (...) values (...)
//hibernate会删除A对象的级联属性(如何不执行这一步)
delete from process_template_pre_handler where process_template_uuid=?
//保存B对象级联属性(没问题)
insert into process_instance_pre_handler (...) values (...)
你期待的结果是什么?实际看到的错误信息又是什么?
目标:A对象级联属性赋给B对象级联属性,A对象数据不产生变化
实际:A对象级联属性会正确的传给B对象,但是却会将A对象的级联属性删除