JPA/EJB コードで「分離エンティティが永続エラーに渡されました」というエラーが発生する 質問する

JPA/EJB コードで「分離エンティティが永続エラーに渡されました」というエラーが発生する 質問する

この基本的な JPA/EJB コードを実行しようとしています:

public static void main(String[] args){
         UserBean user = new UserBean();
         user.setId(1);
         user.setUserName("name1");
         user.setPassword("passwd1");
         em.persist(user);
  }

次のエラーが発生します:

javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.JPA.Database

何か案は?

インターネットで検索したところ、次のような理由が見つかりました。

これは、オブジェクトの作成方法、つまり ID プロパティを明示的に設定した場合に発生します。ID 割り当てを削除すると、問題は解決しました。

しかし、理解できませんでした。コードを動作させるには何を変更する必要がありますか?

ベストアンサー1

このエラーは、オブジェクトの ID が設定されているために発生します。Hibernate は一時オブジェクトと分離オブジェクトを区別し、persist一時オブジェクトのみで動作します。persistオブジェクトが分離されていると判断された場合 (ID が設定されているため、分離されていると判断されます)、「分離オブジェクトが永続化に渡されました」というエラーが返されます。詳細については、ここそしてここ

ただし、これはもし主キーが自動生成されるように指定しました。フィールドが常に手動で設定されるように構成されている場合、コードは機能します。

おすすめ記事