JPA+Hibernate持久化數據:detached entity passed to persi

錯誤日誌: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

    以上兩種辦法都可。
對象

相關文章
相關標籤/搜索