JPA+Hibernate永続化データ:detached entity passed to persi
1887 ワード
エラーログ:
問題の原因:
遊離状態のオブジェクトを永続化(persist)しようとすると、そのID生成ポリシーはJPAによって自動的にポリシーを生成するように構成されていますが、エンティティのIDにはすでに値があります.
エラーコード:
解決策:
1. u.setId(1 L)を削除します.
2. u.setId(null);
以上の2つの方法はいずれもよい.
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つの方法はいずれもよい.