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

时间:2015-02-20 10:40:36

标签: java hibernate jpa entitymanager

我有像下面的员工类

@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:传递给的分离实体   坚持:com.myComp.Employee

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

可以吗,因为它的某个成员变量(而不是Employee)的id为非零值,而hibernate试图保持?如是 我可以得到哪个确切的类是分离实例,因为有许多成员变量?

2 个答案:

答案 0 :(得分:0)

  

所以我不明白为什么考虑将Employee视为分离实例而不是瞬态?

我也不能告诉你,因为你的代码示例太简短(并且在某种程度上也不正确)。

  

可以吗,因为它的某个成员变量(而不是Employee)的id为非零值,而hibernate试图保持?

可能。

  

如果是,我可以得到哪个确切的类是分离实例,因为有许多成员变量?

你已经拥有了。根据您发布的例外情况,它是Employee的一个实例。根据给定的信息,我必须猜测,你有员工也参考自己(也许通过部门?)。如果您没有级联持久性操作,则可能会在尝试保留其中一个较低级别的员工时遇到此异常。但正如所说,你的样本太短暂而且不完整,无法真正给你一个完整的答案。

答案 1 :(得分:0)

猜猜但是: 经理可能也是员工,当你在新的雇佣对象上设置经理时,很可能你正在使用现有的经理,但你没有从同一个EnityManger中检索它(或者没有给它做好准备)。而且例外。没有您的DAO代码或其他实体,它只是猜测。

相关问题