@AllArgsConstructor의 문제점
- @AllArgsConstructor는 모든 필드를 파라미터로 받아 객체를 생성하기 때문에 일부 필드만 사용하는 경우에 불필요한 의존성을 발생 시킬 수 있음
- @AllArgsConstructor는 정의한 모든 필드를 가진 생성자를 생성해주는데 다음과 같이 같은 타입의 파라미터를 서로 바꿔 입력하였을 경우에도 에러가 발생하지 않는 문제가 발생함
@AllArgsConstructor
public class carDto {
private String carId;
private int carNum;
private String carUser;
}
// new carDto("Tom", 4123, "n1309afc2")
대책 (@Builder)
- 원하는 필드를 설정할 생성자 메소드를 private로 정의한 뒤 @Builder를 적용
※ @AllArgsConstructor가 없는 상황에서 @Builder와 @NoArgsConstructor를 클래스 레벨에서 같이 적용할 경우 모든 필드를 파라미터로 갖는 생성자가 생성될 수 없어 build 시에 오류가 발생하기 때문에 @Builder를 클래스 레벨이 아닌 생성자 메소드 레벨에 적용해야 함
@NoArgsConstructor
public class carDto {
private String carId;
private int carNum;
private String carUser;
@Column(columnDefinition = "text", updatable = false)
private String createDt = ServerInfoUtil.LocalDateTimeToString(LocalDateTime.now());
@PrePersist
protected void onCreate() {
createDt = this.LocalDateTimeToString(LocalDateTime.now());
}
public static String LocalDateTimeToString(LocalDateTime localDateTime) {
return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
@Builder
private carDto(String carId, int carNum, String carUser) {
this.carId = carId;
this.carNum = carNum;
this.carUser = carUser;
}
}
'Spring > Spring Data JPA' 카테고리의 다른 글
JPQL(Java Persistence Query Language) (1) | 2024.04.05 |
---|---|
spring.jpa.hibernate.ddl-auto (0) | 2024.03.19 |
댓글