错误日志:java
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.sdt.comm.business.authority.model.User at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) ... at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.sdt.comm.business.authority.model.User at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:852) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:826) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:830) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875)
问题缘由:shell
一个游离态的对象要被持久化(persist)时,其ID生成策略已由JPA配置为自动生成策略,可是该实体的ID此时已经有值。eclipse
错误代码:ide
@Override public String addUserTX() { User u = new User(); BeanUtils.copyProperties(getObjVO(), u); u.setId(1L); //这里 System.out.println("u.password->" + u.getPassword()); userDAO.add(u); System.out.println("user save success!!!"); return "添加用户成功"; }
解决办法:hibernate
1. 删掉u.setId(1L);日志
2. u.setId(null);code
以上两种办法都可。
对象