トランザクション全体で、単純な作成/削除を機能させることができません。私は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() はデタッチまたはマネージドのいずれかを削除できます。しかし、なぜ失敗したのでしょうか。
手伝ってくれてありがとう
マイケル