-
[JPA] detached entity passed to persist.이슈 해결 2019. 4. 17. 10:17
detached entity passed to persist.
JPA를 사용하며 개발을 하다보면 영속성으로 인해 다양한 에러 경험들을 마주할 수 있게 된다.
그 중 하나를 포스팅하려고 한다.
위의 에러는 엔티티간 종속성 관계로 인하여 발생하는 문제다.
A 엔티티와 B 엔티티가 @ManyToOne과 같은 관계 설정이 되어 있을 때,
A 엔티티의 인스턴스가 A-1, A-2, B의 인스턴스 B-1이 관계를 맺었다고 해보자.
이 때 A-1을 save()를 이용하여 저장할 경우 B-1이 함께 저장될 것이다.
그리고 A-2를 save()를 이용해 저장할 때도 B-1이 함께 저장된다.
여기서 위의 에러가 발생하는 것이다.
B의 엔티티가 이미 DB 등록된 키(Primary Key) 값을 가지고 있기 때문인데, 이미 등록되어 있는 값을 한번 더 등록시켜 중복 저장이 발생하기 때문에 에러를 반환하는 것이다.
JpaRepository 인터페이스가 상속하는 CrudRepository의 save() 메소드는 저장한 엔티티를 돌려준다. 위의 에러를 해결하기 위해서는 엔티티간 종속성을 해제하고 각각 저장을 하는 것이다.
즉 엔티티(테이블) 설계의 미스라고 할 수 있겠다.
엔티티에 종속성 설정 어노테이션(@ManyToOne과 같은)을 사용한 영역에 cascade 설정이 되어 있을 것이다.
해당 설정을 제거해주면 해결된다.
참고 : https://m.blog.naver.com/sim4858/220998440706
'이슈 해결' 카테고리의 다른 글
[JPA] @Scheduled 어노테이션과 트랜잭션 처리 (0) 2019.07.23 [AWS RDS] Unable to acquire JDBC Connection (0) 2019.05.27 [Spring Boot] Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException (0) 2019.03.17 [Docker] unauthorized: incorrect username or password. (0) 2019.03.17 [Spring Boot] This connection has been closed (0) 2019.03.05