javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:分离的实体传递给持久化?

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist?

我有如下员工Class

@Entity
public  class Employee{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
id;
Department dept;
Address add;
@JoinColumn(name = "manager_emp_id", insertable = false, updatable = false)
Manager Employee;
//other fields and their getters and setters

}

当我调用 entityManager.persist(Employee emp) 坚持时,我遇到以下错误

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist : com.myComp.Employee

我已验证 employee.id 为 null 或 0。所以我不明白为什么将 Employee 视为分离实例而不是瞬态实例?

会不会是因为它的某个成员变量(而不是 Employee)的 id 为非零值,而 hibernate 正试图持久化?如果是 因为有很多成员变量,我能得到哪个确切的 class 是分离实例吗?

So i am not getting why its considering Employee as detached instance instead of transient ?

我也不能告诉你,因为你的代码示例太简短(而且在句法上也不正确)。

Can it because its some member variable(instead of Employee) has id as non zero value and hibernate is trying to persist ?

可能。

If yes can i get which exact class is detached instance as there are many member variables?

这个你已经有了。根据您发布的异常,它是 Employee 的一个实例。根据我必须猜测的给定信息,您有员工也引用自己(可能通过部门?)。如果您没有级联持久化操作,您可能会在尝试持久化一名较低级别的员工时遇到此异常。但如前所述,您的示例太简短且不完整,无法真正为您提供完整的答案。

猜测但是: manager 可能也是 Employee,当你在你的新 Employ 对象上设置 manager 时,很可能你正在使用现有的 employee 但你没有从同一个 EnityManger 中检索它(或者没有 marge 它)。而例外。如果没有您的 DAO 代码或其他实体,它只是猜测。