jpa 级联属性赋值给其他对象级联属性后,会被删除

问题描述

将对象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对象的级联属性删除

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题