对象引用了一个未保存的临时实例-在涉及的休眠主表中刷新之前保存该临时实例

问题描述 投票:0回答:1

我有一个名为bmu_mstr的主表,对应的实体类是

@Entity
@Table(name = "bmu_mstr")
@JsonIgnoreType
//@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property="@bmuId")
public class BmuMaster implements Serializable{


    private static final long serialVersionUID = -8284996311089344328L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "bmu_id", unique = true, nullable = false)
    private Integer bmuId;

    @Column(name = "bmu_desc")
    private String bmuDesc;

    public BmuMaster() {
    }

    public BmuMaster(Integer bmuId) {
        this.bmuId = bmuId;

和其他表是comp_rsc_move_employee,它具有tranfer_from和transfer_to列。基本上是bmu主表的bmu_id。相应的类是

@Entity
@Table(name = "comp_rsc_move_employee")
public class CompRscEmployee implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer rscId;

    @ManyToOne
    @JoinColumn(name = "transfer_from")
    private BmuMaster transferFrom;

    @ManyToOne
    @JoinColumn(name = "transfer_to")
    private BmuMaster transferTo;

现在我要更新comp_rsc_move_employee表中的数据

        CompRscEmployee compRscEmployee = new CompRscEmployee();


        compRscEmployee.setTransferFrom(new BmuMaster(employeeDetails.getTransferFrom()));
        compRscEmployee.setTransferTo(new BmuMaster(employeeDetails.getTransferTo()));

        CompRscEmployee rscEmp = compDao.saveOrUpdate(compRscEmployee)
                .orElseThrow(() -> new CommonException("Unable to save or update CompRscEmployee data"));

但是现在我想保存CompRscEmployee时,hibernate会告诉'对象引用了一个未保存的临时实例-在刷新之前保存该临时实例'

我搜索了所有stackoverflow线程,但没有提出我的方案。我的BmuMaster是MASTER表,插入CompRscEmployee表时,我不想在该表中保存数据。显然,我可以更改实体类CompRscEmployee,并且可以将数据类型从BmuMaster更改为Integer。但我不想这样做。任何想法如何实现这一目标?这似乎是一个非常基本的问题。但是我无法做到这一点,因为我刚冬眠。.

hibernate
1个回答
0
投票
不确定代码的设置方式,但类似这样

BmuMaster from = masterDao.findById(employeeDetails.getTransferFrom()) .orElseThrow(() -> new CommonException("Unable to find department" + employeeDetails.getTransferFrom())); BmuMaster to = masterDao.findById(employeeDetails.getTransferTo()) .orElseThrow(() -> new CommonException("Unable to find department" + employeeDetails.getTransferTo())); CompRscEmployee compRscEmployee = new CompRscEmployee(); compRscEmployee.setTransferFrom(from); compRscEmployee.setTransferTo(to); CompRscEmployee rscEmp = compDao.saveOrUpdate(compRscEmployee) .orElseThrow(() -> new CommonException("Unable to save or update CompRscEmployee data"));

© www.soinside.com 2019 - 2024. All rights reserved.