티스토리 뷰

예제 프로젝트에서 양방향 연관관계 연습하다가 자주 만났던 에러,, ToString StackOverFlow,,

toString 을 잘 살펴봤어야 했다..! 

 

에러 발생 상황
  • 양방향 관계를 가지는 Team 과 Member을 설계했음
  • 양방향으로 설정한 이유 : Team 에서도 Member 을 조회하고 Member에서도 Team 을 조회하는 기능이 필요할 수 있기 때문
  • Team 과 Member 엔티티는 다음과 같다
@Entity
data class Member(
    @Id val id: String,
    @ManyToOne
    var team: Team
) {
	override fun toString(): String {
        return "Member(id='$id', name='$name', email='$email', phone='$phone', 
        photoUrl='$photoUrl', team=$team)"
    }
}

@Entity
data class Team(
    val teamName: String,
    @OneToMany(mappedBy = "team", fetch = FetchType.EAGER)
    val memberList: MutableList<Member> = mutableListOf()
) {
	override fun toString(): String {
        return "Team(teamName='$teamName', memberList=$memberList)"
    }
}

team 의 toString 을 살펴보자,,

team 의 toString memberList 를 출력하고 member 는 team 을 출력해서,, 계속해서 서로를 호출해서 stack overflow 가 발생함.

아래와 같은 테스트 코드를 돌려봤는데 toString 오버플로우가 발생함

    @Test
    @Transactional
    fun OneToManyTest() {
        println(teamRepository.findById(1L).get())
    }

 

해결 방법

 TeamEntity . . 의. . 에러난 부분을 없애자 ㅋ toString 을 오버라이딩할 때 모든 변수를 출력하도록 해서 생긴 에러였음.

Team의 toString 에서 memberList를 출력하지 않도록, , 정말 어이없는, , ㅠ 

아 그리고 만약 toString 을 오버라이딩 하지 않아서도 해당 에러가 발생할 수 있음. 그래서 toString 을 오버라이딩 해서 연관관계를 갖는 필드를 출력하는 부분을 삭제해줘야함 

override fun toString(): String {
        return "Team(teamName='$teamName')"
}

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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 31
글 보관함