JPA 엔티티에서 Lombok을 사용할 때 충돌이 발생할 수 있는 대표적인 원인은:
- 프록시 초기화 문제
- Setter 자동 생성으로 인한 객체 일관성 문제
- @EqualsAndHashCode로 인한 무한 루프
Lombok을 안전하게 사용하는 방법
✅ 필수적으로 사용하면 안 되는 어노테이션
- @Builder → 대신 @AllArgsConstructor + 정적 메서드 사용
- @EqualsAndHashCode → 대신 @Id 기반의 equals() 직접 구현
- @Setter → 대신 명시적인 변경 메서드 작성
✅ 안전한 대체 방법
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
- @NoArgsConstructor(access = AccessLevel.PROTECTED): 기본 생성자를 외부에서 직접 호출하지 못하게 막아 객체 일관성을 유지한다.
- Setter 대신 명시적인 변경 메서드 추가:
public void updateAge(int age) {
this.age = age;
}
'Spring' 카테고리의 다른 글
@EqualsAndHashCode 사용 시 엔티티 간 무한 루프 발생 가능성에 대한 원인과 해결 (0) | 2025.02.06 |
---|---|
JPA 엔티티에서 Lombok 사용 시 프록시 초기화 문제 (0) | 2025.02.06 |
Spring 기본 dependency 설정 (0) | 2023.10.12 |
Spring ) SpringBoot로 SpringSecurity 기반의 JWT 토큰 구현하기 (0) | 2023.09.05 |
Spring ) Spring Security 에 @AuthenticationPrincipal 사용시 예제 (0) | 2023.09.05 |