简单地来看,将一个游离的对象要被持久化(save)时报错。
我们知道要持久化对象时候,通常Hibernate会根据ID生成策略自动生成ID值,但是这个对象ID已经有值,所有抛错。这个错误会出现在配置如下一对多@OneToMany的关联关系等出现。
// 部门拥有的车辆 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "assignedDept") @JsonIgnore private List<Vehicle> assignedVehicles;
因为级联关系是CascadeType.ALL,所以save时会保存级联的对象Role,但是Role已经存在,因此就报错了。将cascade改为CascadeType.MERGE或者CascadeType.REFRESH即可,表示级联对象在Role表存在则进行update操作,而不做save操作。级联操作时谨慎用CascadeType.ALL
改为:
@OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, mappedBy = "assignedDept")
来源:https://www.cnblogs.com/nelson-hu/p/7485319.html