A different object with the same identifier value was already associated with the session

유비빅·2021년 10월 1일
0

A different object with the same identifier value was already associated with the session

📍원인

하나의 세션(런타임) 동안 동일한 PK 의 엔터티가 두개 이상 존재할 때 발생한다.

일반적으로는 동일한 PK 의 엔터티를 2회 이상 조회해도 a == b 가 되어 문제되지 않지만, 코드가 복잡해지면 a != b 인 상태가 되고 예외를 발생시킨다.

가장 좋은 방법은 하나의 엔터티는 한번만 조회하는것이 가장 좋다.
그렇게 하지 못할 경우 compareTo()를 구현하면됨

단, 이 방법은 JPA 에서 보장하던 영속성을 스스로 깨는 방법
두 개의 엔터티에 서로 다른 업데이트가 발생했을 때, 어떤 내용이 저장되는지를 예측할 수 없기때문

0개의 댓글