문제상황

  • PostMan으로 게임방 생성하는 API를 테스트하는데 다음과 같은 에러가 발생했다.
  • 회원탈퇴 기능을 추가한 후, 회원이 탈퇴하더라도 피드백 게시판의 글은 그대로 보존하기 위해, 아래와 같이 CascadeType.PERSIST 를 OneToOne으로 Member와 연관관계가 있는 곳마다 달아주었더니 다음과 같은 에러가 발생했다.

 

GameRoomAttendee 엔티티 부분

 

PostMan error
인텔리제이 콘솔창 에러

 

 

원인 

  • 엔티티간 종속성 관계로 발생한 문제이다.
  • GameRoomAttendee가 이미 Member(PK)값을 가지고 있기 때문에 중복 저장이 발생되어 발생한 에러이다.

 

해결방법

  • 영속성 전이인 cascade 옵션을 제거해주었다.

 

제대로 방생성 기능이 수행됨 !

 

 

CascadeType의 종류

  • CascadeType.RESIST: 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist() 를 수행하면 연관 엔티티도 함께 persist()가 수행된다. 만약 연관 엔티티가 DB에 등록된 키값을 가지고 있다면 detached entity passed to persist Exception이 발생한다.
  • CascadeType.MERGE: 트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 되면 변경사항이 적용된다.(연관 엔티티의 추가 및 수정 모두 반영됨)
  • CascadeType.REMOVE: 삭제 시 연관된 엔티티도 같이 삭제됨
  • CascadeType.DETACH: 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티도 detach() 상태가 되어 변경사항이 반영되지 않는다.
  • CascadeType.ALL: 모든 Cascade 적용

[ 참고자료 ]

https://allonsyit.tistory.com/108

 

[JPA] 연관관계 영속성 전이 CASCADE

# CASCADE - 부모 엔티티에서 자식 엔티티로 상태를 전이하는 것 ex. 부모 엔티티 저장할 때 자식 엔티티도 함께 저장, 게시글과 첨부파일 - Parent와 Child가 라이프사이클이 동일할 때, Child를 소유하

allonsyit.tistory.com

 

+ Recent posts