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

我有一个名为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。但我不想这样做。任何想法如何实现这一目标?这似乎是一个非常基本的问题。但是我无法做到这一点,因为我还很冬眠。

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

您应该从数据库中加载BmuMaster个实例,而不是创建新实例,以传递到setTransferFromsetTransferTo方法中。

不确定代码的设置方式,但是类似这样的


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"));
本文链接:https://www.f2er.com/3117014.html

大家都在问