Spring/트랜잭션
org.hibernate.ObjectDeletedException: deleted instance passed to merge:
한비Skyla
2025. 2. 5. 19:04
"deleted instance passed to merge" 오류는 삭제된 엔티티를 merge()에 전달하여 발생
해결 방안
삭제된 엔티티는 재사용하지 않도록 함.
- 필요한 경우 새로운 인스턴스를 생성
- 트랜잭션 및 비즈니스 로직을 재검토하여 삭제와 업데이트 작업이 충돌하지 않도록 해야 한다.
삭제된 엔티티를 merge()에 전달
엔티티가 한 번 삭제되면, 그 엔티티는 더 이상 영속성 컨텍스트에 속하지 않고, DB에서도 삭제된 상태가 됨.
이 상태의 엔티티를 merge()로 병합하려고 하면 Hibernate는 "이미 삭제된 객체를 merge하려고 한다"고 판단하여
예외를 발생시킴.
* em.remove(user)를 호출하면 user는 영속성 컨텍스트에서 제거된다.
(Object is already marked for being deleted)
이후 트랜잭션을 커믹해서 플러시를 호출하면 실제 데이터베이스에 삭제 쿼리를 전달함.
하지만 삭제된 엔티티를 한 트랜잭션내에서 다시 삭제할려고하면 해당 익셉션이 발생한다.
[JPA] deleted instance passed to merge
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.ObjectDeletedException: deleted instance passed to merge: 위와 ...
leechumong.blogspot.com