对象引用了一个未保存的瞬态实例-在刷新涉及的hibernate主表之前先保存瞬态实例



我有一个名为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_employe,它有transfer_from和transfer_to列。。基本上是bmu主表的bmuid。相应的类别是

@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_employe表中的数据

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。但是我不想那样做。。有什么想法可以实现吗??这似乎是一个非常基本的问题。但我无法做到这一点,因为我还不太适应冬眠。。

您应该从数据库加载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"));

最新更新