錯誤日誌: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
以上兩種辦法都可。
對象