Spring

JPA 엔티티에서 Lombok 사용 시 프록시 초기화 문제

Albosa2lol 2025. 2. 6. 11:50

JPA는 Lazy Loading을 사용할 경우 엔티티를 프록시 객체로 감싼다.
Lombok의 @ToString, @EqualsAndHashCode는 모든 필드를 참조하는데, 이때 프록시 필드를 접근하려 하면 예외가 발생하게 된다.

 

예시

@Entity
@Getter
@ToString
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
    private List<Order> orders;
}

 

문제 발생

User user = userRepository.findById(1L).get();
System.out.println(user);

 

  • @ToString이 orders 필드를 호출 → orders는 Lazy 로딩이므로 초기화되지 않은 프록시 객체
  • 프록시 필드 접근 시 LazyInitializationException 발생

해결방법

 

 

  • @ToString(exclude = "orders")로 무한 호출 방지
  • DTO를 사용하여 필요한 데이터만 반환 ( 대부분 이렇게 해결하는 편이다 )
@Getter
@ToString(exclude = "orders")
public class User { ... }