오늘 팀 프로젝트를 시작하며 @ColumnDefault 어노테이션을 사용했다
코드
@Entity
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "boards")
public class Board extends TimeStamp {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String username;
@ColumnDefault("'#ffffff'")
private String backgroundColor;
@ColumnDefault("false")
private boolean status;
@OneToMany(mappedBy = "board", cascade = CascadeType.ALL)
private List<Catalog> catalogList = new ArrayList<>();
@OneToMany(mappedBy = "board")
private List<MemberBoard> memberBoardList = new ArrayList<>();
@Builder
public Board(String title, String username, String backgroundColor) {
this.title = title;
this.username = username;
this.backgroundColor = backgroundColor;
}
public static Board fromRequestDto(BoardRequestDto requestDto) {
return Board.builder()
.title(requestDto.title())
.username(requestDto.username())
.backgroundColor(requestDto.backgroundColor())
.build();
}
}
가정
RequestDto에 BackgroundColor를 설정 안 하고 Entity로 치환해서 저장했을 때
- Nullable = true
- Null 값이 들어가면서 BackgroundColor는 자동으로 #ffffff로 바뀔 것이다.
- Nullable = false
- Null 값이 들어가면서 Nullable에 팅겨져 나갈 것이다.
그럼 ColumnDefault를 쓰는데, 만약 Nullable = false를 해야되는 상황이라면?
ColumnDefault를 쓰지말고, 따로 메서드로 구현하면 될 것이다.
public void 예시(RequestDto req) {
String backgroundColor = req.getBackground();
if(backgroundColor == null) {
backgroundColor = "#ffffff"
}
}
이런 식으로 빼서 작성하면 된다.
'TIL' 카테고리의 다른 글
TIL 2023-12-28 스프링 단위 테스트랑 통합 환경 테스트 차이가 뭘까? (0) | 2023.12.29 |
---|---|
TIL 2023-12-27 팀 프로젝트 위치 변경 로직 구현 - 삽입 정렬 (0) | 2023.12.28 |
TIL 2023-12-22 의존성에 대한... (0) | 2023.12.22 |
TIL 2023-12-21 @Modifying QueryDsl에도 적용이 될까? (0) | 2023.12.21 |
TIL 2023-12-20 스프링 해시태그 기능 구현 (0) | 2023.12.20 |