JPA+Hibernate永続化データ:detached entity passed to persi


エラーログ:
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)

問題の原因:
遊離状態のオブジェクトを永続化(persist)しようとすると、そのID生成ポリシーはJPAによって自動的にポリシーを生成するように構成されていますが、エンティティのIDにはすでに値があります.
エラーコード:
@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 "      ";
}

解決策:
    1. u.setId(1 L)を削除します.
    2. u.setId(null);
以上の2つの方法はいずれもよい.