org.hibernate.PersistentObjectException: detached entity passed to persist

简单地来看,将一个游离的对象要被持久化(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