我正在尝试运行这个基本的 JPA/EJB 代码:
public static void main(String[] args){
UserBean user = new UserBean();
user.setId(1);
user.setUserName("name1");
user.setPassword("passwd1");
em.persist(user);
}
我收到此错误:
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.JPA.Database
有任何想法吗?
我在互联网上搜索,我发现的原因是:
这是由您创建对象的方式引起的,即如果您显式设置了 ID 属性。删除 ID 分配修复了它。
但我没有明白,我需要修改什么才能使代码正常工作?
发生错误是因为设置了对象的 ID。Hibernate 区分瞬态对象和分离对象,并且
persist
仅适用于瞬态对象。如果persist
得出结论该对象已分离(因为设置了 ID),它将返回“已分离对象传递给持久化”错误。您可以在此处和此处找到更多详细信息。然而,这仅适用于如果您指定的主键是自动生成的:如果该字段设置为始终手动设置,那么你的代码的作品。