알게 되는 내용 조금씩이라도 기록하기😛 |
Column Default 설정
두 가지 방법
status의 기본 값을 1이라고 설정하고 싶을 때
@Column(columnDefinition = “type default value”)
or
@ColumnDefault(”value”)
**@Column(columnDefinition = "integer default 1")**
private Integer status;
// or
**@ColumnDefault("1")**
private Integer status;
실행 결과
DB에 insert할 때 default 값이 적용되도록 설정
문제점
status와 history에 default 값을 각각 1과 0으로 설정했는데,
새로운 약속 생성 기능에서 **em.persist(plan)**
이 실행될 당시
insert query에 모든 attribute가 포함되며 값이 없는 attribute는 null 값이 들어감을 확인
즉, null 값으로 설정되어 attribute에 설정한 default 값이 의미가 없어짐..!!
Entity에 @DynamicInsert
어노테이션 추가
위 어노테이션은 insert 시 null 인 필드를 제외시킴
따라서, 값이 입력되지 않은 status, history를 포함한 속성은 insert query에서 제외되며,
null 또는 default 값으로 DB에 저장된다.
참고
@DynamicUpdate : update 시 null 인 필드 제외
Code
@Entity
@Getter
@NoArgsConstructor
@DynamicInsert
public class Plan {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "plan_id")
private Long id;
@ManyToOne
@JoinColumn(name = "team_id")
private Team team;
@Column(name = "plan_name")
private String name;
// ... 생략 ... //
@ColumnDefault("1")
private Integer status;
@ColumnDefault("0")
private Integer history;
}
실행 결과