2025/02/06 3

@EqualsAndHashCode 사용 시 엔티티 간 무한 루프 발생 가능성에 대한 원인과 해결

무한 루프 발생 원인JPA 엔티티에서 연관 관계가 있을 때 @EqualsAndHashCode는 모든 필드를 비교하려고 한다.이때 서로를 참조하고 있는 경우 무한 루프가 발생할 수 있다. @Entity@Getter@EqualsAndHashCodepublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "user") private List orders;}@Entity@Getter@EqualsAndHashCodepublic class Order { @Id @GeneratedValue(strategy = GenerationTyp..

Spring 2025.02.06

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

JPA는 Lazy Loading을 사용할 경우 엔티티를 프록시 객체로 감싼다.Lombok의 @ToString, @EqualsAndHashCode는 모든 필드를 참조하는데, 이때 프록시 필드를 접근하려 하면 예외가 발생하게 된다. 예시@Entity@Getter@ToStringpublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) private List orders;} 문제 발생User user = userRepository.findById(1L).get();System.out..

Spring 2025.02.06

Lombok과 JPA 충돌 가능성 & 해결 방법

JPA 엔티티에서 Lombok을 사용할 때 충돌이 발생할 수 있는 대표적인 원인은:프록시 초기화 문제Setter 자동 생성으로 인한 객체 일관성 문제@EqualsAndHashCode로 인한 무한 루프Lombok을 안전하게 사용하는 방법✅ 필수적으로 사용하면 안 되는 어노테이션@Builder → 대신 @AllArgsConstructor + 정적 메서드 사용@EqualsAndHashCode → 대신 @Id 기반의 equals() 직접 구현@Setter → 대신 명시적인 변경 메서드 작성✅ 안전한 대체 방법@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User { @Id @GeneratedValue(strat..

Spring 2025.02.06