トランザクション全体で、単純な作成/削除を機能させることができません。私はSpring/JPA/Hibernateを使用していますが、ehcacheは使用していません。
私のエンティティ クラス User と、Spring の @Transactional でマークされた 2 つのメソッドを持つ MyDao (@Transactional がサービスを提供する必要があることは理解しています。ここでは、私のケースを単純化しています)
パブリッククラス MyDao { @PersistenceContext プライベート EntityManager entityManager; @トランザクション public void create(ユーザー ユーザー) { entityManager.persist(ユーザー); entityManager.refresh(ユーザー); } @トランザクション public void delete(ユーザー ユーザー) { // ユーザーが切り離されている可能性があるため、Hibernate を使用して削除します。 セッション sess = entityManager.unwrap(Session.class); sess.delete(ユーザー); } }
私のテスト:
{ ユーザー user = new User(); myDao.create(ユーザー); // 上記は問題ありません。生成された ID で作成されたユーザー。 // トランザクションがクローズされていると想定しているため、ユーザーは切り離されています myDao.delete(ユーザー); // 上記はエラー「デタッチされたインスタンスを削除しています ...」で失敗しました }
Hibernate によると、session.delete() はデタッチまたはマネージドのいずれかを削除できます。しかし、なぜ失敗したのでしょうか。
手伝ってくれてありがとう
マイケル