무한 루프 발생 원인
JPA 엔티티에서 연관 관계가 있을 때 @EqualsAndHashCode는 모든 필드를 비교하려고 한다.
이때 서로를 참조하고 있는 경우 무한 루프가 발생할 수 있다.
@Entity
@Getter
@EqualsAndHashCode
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "user")
private List<Order> orders;
}
@Entity
@Getter
@EqualsAndHashCode
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private User user;
}
예시
User user = userRepository.findById(1L).get();
Set<User> userSet = new HashSet<>();
userSet.add(user);
HashSet이 equals()를 호출 → User.equals() 내부에서 Order.equals() 호출 → 다시 User.equals() 호출 → 무한 루프 발생
해결방법
- @EqualsAndHashCode(exclude = "orders") 사용
- 식별자(id)만 비교
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@EqualsAndHashCode.Include
private Long id;
}
'Spring' 카테고리의 다른 글
로깅설정 DEBUG -> INFO 가 필요한 이유 (0) | 2025.02.12 |
---|---|
NullPointerException이란 무엇이며, 어떻게 해결할 수 있나? (0) | 2025.02.12 |
JPA 엔티티에서 Lombok 사용 시 프록시 초기화 문제 (0) | 2025.02.06 |
Lombok과 JPA 충돌 가능성 & 해결 방법 (0) | 2025.02.06 |
Spring 기본 dependency 설정 (0) | 2023.10.12 |