Recording/에러 기록장
[Spring Data JPA] 여러 관계가 매핑된 엔티티의 toString() 메소드 출력 오류
LEFT
2025. 2. 21. 16:33
상황
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()에 제외할 필드들을
설정할 수 있다는 것을 알 수 있었다.