BACKEND/Trouble Shooting

stackOverFlow Error

이-프 2023. 12. 21. 12:35

so2zzy 프로젝트를 하면서 겪었던 순환참조문제이다. 해당 문제를 Discussion에 업로드하여 다른 팀원들이 빠르게 문제를 해결할 수 있었다. 역시 기록과 공유의 중요성..! 🌱

🔗https://github.com/so2zy/so2zy_BE/discussions/23#discussion-5878755

문제

Infinite recursion (StackOverflowError) 
(through reference chain: com.aroom.domain.room.model.Room["accommodation"]
->com.aroom.domain.accommodation.model.Accommodation["roomList"]
->org.hibernate.collection.spi.PersistentBag[0]
->com.aroom.domain.room.model.Room["accommodation"]
->com.aroom.domain.accommodation.model.Accommodation["roomList"]- ~~~

현재 양방향 연관관계에 놓여진 Accommodation과 Room에서 무한순환참조가 발생했다.

해결방안

  • @OneToMany @ManyToOne로 인해 순환참조 원인
  • @JsonManagedReference & @JsonBackReference 추가
    @JsonManagedReference
    @OneToMany(mappedBy = "accommodation", fetch = FetchType.LAZY)
    private List<Room> roomList = new ArrayList<>();
    • @JsonManagedReference : 부모 Entity → 자식 Entity
      • 정상적으로 직렬화를 수행
    @JsonBackReference
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "accommodation_id")
    private Accommodation accommodation;
    • @JsonBackReference : 자식Entity → 부모 Entity
      • 직렬화 수행 x

        ⇒ 무한 순환 참조 해결

🔗 참고 url

https://bellog.tistory.com/149


Uploaded by N2T