Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

우주에서 글을 적어본다

[Spring boot JPA] 엔티티의 양방향 관계 본문

스프링

[Spring boot JPA] 엔티티의 양방향 관계

우주로 날아간 사람 2023. 2. 19. 23:56

프로젝트를 진행 중에 Poll 엔티티와 Choice 엔티티의 저장에서 오류가 발생했다.

문제 상황) 
  1. Poll은 Choice를 OneToMany로 연결
  2. Choice는 Poll을 ManyToOne으로 연결

문제는 바로 순환 참조였다.
순환 참조는 아래를 의미한다.

JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여 StackOverflowError 를 발생시키는 현상


검색해 보니 다양한 해결방법이 있지만 간단하게 애노테이션을 사용하여 해결하였다.
바로 @JsonManagedReference 과 @JsonBackReference 를 사용하면 된다. 

연관관계의 주인 엔티티의 반대에 Managed를 사용해서 직렬화를 수행하고
연관관계의 주인 엔티티에 Back을 사용해서 직렬화를 수행하지 않는다.

※ 추가적인 방안으로 다음이 있다.

1) @JsonIgnore 사용하기
2) DTO 사용하기 

'스프링' 카테고리의 다른 글

[Spring boot JPA] @Query 수정, 삭제  (0) 2023.03.15
[Spring boot JPA] Fetch 전략과 orphanRemoval  (0) 2023.03.15