본문 바로가기
JPA

[JPA] 영속성 전이 충돌 문제

by 희디비 2025. 7. 19.
📌 주의: 해당 글은 잘못된 내용이 포함 되어 있을 수 있습니다.
혹시 잘못된 내용을 발견 하신다면 댓글로 알려주시면 감사 합니다!

 

🌱 [ 배경 ]

프로젝트를 하던 중 entity.delete를 호출 하였을 때 삭제가 되지 않는 문제가 발생 했습니다.

 

트랜잭션 상황에서 delete를 호출 하고 커밋 되면 영속성 컨텍스트에서

delete 쿼리가 나가야 하는데 쿼리가 발생 하지 않는 문제 였습니다.

원인을 알아 보기 위해 간단히 엔티티를 설정 하고 테스트를 해보기로 했습니다.


🌱 [ 엔티티 연관 관계 ]

문제 상황은 OneToOne 양방향 연관 관계에서 발생 했기 때문에

회원과 주소 엔티티를 만들고 양방향 연관 관계를 두었습니다.

🌱 [ Code ]

문제 발생 상황과 같이 한쪽 엔티티인 회원에 영속성 전이와 고아 객체 제거를 두었습니다.

 

[ 회원 ]

 

[ 주소 ]

 


🌱 [ Test Code - Delete ]

회원과 주소를 저장한 상태에서 주소 제거 쿼리를 호출 합니다.

예상하기로는 주소가 삭제 되어 쿼리가 나가야 하지만 실제로는 삭제 쿼리가 발생 하지 않습니다.

 


🌱 [ Test Code - 고아 객체 제거 ]

원인을 알 수 없기 때문에 고아객체 제거가 문제 인가?? 생각이 들어
고아 객체 제거를 테스트 해보았습니다.

 

 

고아객체 제거를 통해 회원의 연관관계를 끊어 delete 쿼리가 발생 하는것을 볼 수 있습니다.

그러면... 영속성 전이에 문제가 있는건가?

생각 하여 회원 엔티티에 영속성 전이만을 남기고 다시 테스트를 합니다.

 

 

 

하지만 여전히 delete 쿼리가 나가지 않음을 확인할 수 있습니다.

그레서 영속성 전이와 delete 쿼리가 충돌 하여 문제가 발생 하는것으로 추측 하였습니다.

 

영속성 컨텍스트 입장에선 영속성 전이를 통해 회원과 주소가 연관관계를 맺고 있는데

delete 쿼리를 호출 하니 "회원은 주소와 연관관계를 맺고 있는데 주소 제거 쿼리를 실행 해야할까?"

라고 생각 하여 충돌이 발생 하지 않는 다고 생각 하였습니다.

영속성 컨텍스트 충돌로 의심이 되지만 명확한 답은 얻을수 없기 때문에 인프런에 질문을 남겼습니다.

결론만 말씀 드리면 영속성 전이 충돌 문제가 맞습니다.  자세한 내용은 아래 질문 링크를 남겨 두었습니다!

 

영속성 전이와 연관관계 질문

영한님 답변 링크

'JPA' 카테고리의 다른 글

[ JPA ] 외래키 데드락 / 낙관적 락  (3) 2025.08.11
[JPA] 영속성 컨텍스트(entityManager)  (0) 2024.05.14