상황
hr데이터베이스에 설계된 엔티티들을 생성하면서 많은 엔티티와 관계를 갖고 있는 Employee엔티티를 만들게되었는데
이 Employee 엔티티를 CommandLineRunner에서 findBySalaryBetween() 메소드를 테스트할때 문제가 발생하였다.
forEach()를 통해 log.info()로 employee.toString()을 출력하였지만 제대로 출력되지 않았다.
원치않는 결과

원인 가능성
@ToString 어노테이션이 추가되었음에도 "순화참조문제 = 무한루프문제" 가능성으로
제대로 출력되지 않을 수 있음
@Entity
@Getter@Setter@NoArgsConstructor
@ToString
@Table(name = "employees")
public class Employee { ... }
@ToString 어노테이션만 붙였을때는 지속적인 에러가 발생할 가능성이 높다.
해결방법
- Lombok에서 @ToString 어노테이션을 추가할때 순환 참조 문제를 방지하기 위하여
@Entity
@Getter@Setter@NoArgsConstructor
@ToString(exclude = {"manager", "subordinates", "jobHistories"})
@Table(name = "employees")
public class Employee {
- 여기서 이 exclude에는 Employee 엔티티의 필드들이 위치
➡️Java 클래스(Employee 엔티티) 내부에서 정의된 필드 - exclude를 설정하여 제외할 {엔티티의 필드들} 을 포함하면 무한루프를 방지 가능
✅제대로 출력 완료

Employee와 관련된 엔티티들이 많을 경우 @ToString으로써 문자열을 출력하고자할때
연관된 엔티티의 필드들까지 toString() 으로 찾아가는 과정에서 제대로 찾지 못하고 주소값만 출력되는 것 같았다.
exclude 속성을 배울 수 있었고 이 속성을 통해 Lombok의 @ToString어노테이션에서 toString()에 제외할 필드들을
설정할 수 있다는 것을 알 수 있었다.
'Recording > 에러 기록장' 카테고리의 다른 글
[Spring Data JPA] RESTful API 에서 "특정 사용자 조회" 오류 해결 (0) | 2025.02.21 |
---|---|
[Docker] 포트 충돌 문제 해결 (0) | 2025.02.20 |
[Expo] 리액트 네이티브 앱 개발 - IDB 오류 (0) | 2022.07.05 |
[Git] GoormIDE(구름 IDE) - Github(깃허브) 연동 문제 (0) | 2022.04.14 |
[CSS] GoormIDE - 동물상 테스트 Codepen 템플릿 오류 (0) | 2022.04.13 |
상황
hr데이터베이스에 설계된 엔티티들을 생성하면서 많은 엔티티와 관계를 갖고 있는 Employee엔티티를 만들게되었는데
이 Employee 엔티티를 CommandLineRunner에서 findBySalaryBetween() 메소드를 테스트할때 문제가 발생하였다.
forEach()를 통해 log.info()로 employee.toString()을 출력하였지만 제대로 출력되지 않았다.
원치않는 결과

원인 가능성
@ToString 어노테이션이 추가되었음에도 "순화참조문제 = 무한루프문제" 가능성으로
제대로 출력되지 않을 수 있음
@Entity
@Getter@Setter@NoArgsConstructor
@ToString
@Table(name = "employees")
public class Employee { ... }
@ToString 어노테이션만 붙였을때는 지속적인 에러가 발생할 가능성이 높다.
해결방법
- Lombok에서 @ToString 어노테이션을 추가할때 순환 참조 문제를 방지하기 위하여
@Entity
@Getter@Setter@NoArgsConstructor
@ToString(exclude = {"manager", "subordinates", "jobHistories"})
@Table(name = "employees")
public class Employee {
- 여기서 이 exclude에는 Employee 엔티티의 필드들이 위치
➡️Java 클래스(Employee 엔티티) 내부에서 정의된 필드 - exclude를 설정하여 제외할 {엔티티의 필드들} 을 포함하면 무한루프를 방지 가능
✅제대로 출력 완료

Employee와 관련된 엔티티들이 많을 경우 @ToString으로써 문자열을 출력하고자할때
연관된 엔티티의 필드들까지 toString() 으로 찾아가는 과정에서 제대로 찾지 못하고 주소값만 출력되는 것 같았다.
exclude 속성을 배울 수 있었고 이 속성을 통해 Lombok의 @ToString어노테이션에서 toString()에 제외할 필드들을
설정할 수 있다는 것을 알 수 있었다.
'Recording > 에러 기록장' 카테고리의 다른 글
[Spring Data JPA] RESTful API 에서 "특정 사용자 조회" 오류 해결 (0) | 2025.02.21 |
---|---|
[Docker] 포트 충돌 문제 해결 (0) | 2025.02.20 |
[Expo] 리액트 네이티브 앱 개발 - IDB 오류 (0) | 2022.07.05 |
[Git] GoormIDE(구름 IDE) - Github(깃허브) 연동 문제 (0) | 2022.04.14 |
[CSS] GoormIDE - 동물상 테스트 Codepen 템플릿 오류 (0) | 2022.04.13 |