JPA default 값 활용하기 (dnnamic Insert)

김명래·2023년 3월 20일
0

먼저 문제가된 컬럼 2개를 보자.

@Column(name = "tr_status", columnDefinition = "varchar(10) default 'start'")
    @Check(constraints = "(tr_status IN ('start', 'done', 'error'))")
    private String trStatus;
@Column(name = "startTransCoding", columnDefinition = "datetime default current_timestamp")
    private LocalDateTime startTransCoding;

해당 데이터가 null 이면 default 값을 주려고 설정해준 제약 조건들인데
repo save method를 호출하여 데이터를 삽입할때
해당 컬럼값에 null 이들어가는것이다.

db table에 제약조건은 제대로 걸려있는것을 확인했는데 왜 문제가 발생했을까 ?
이유는 간단했다.

into
        media (filename, finish_trans_coding, ingest_time, progress, start_trans_coding, tr_status, user_id) 
    values
        (?, ?, ?, ?, ?, ?, ?)

JAP 는 값이 null이던 아니던 다 불러와서 삽입하고 있는것이였다.

알아서 null 값은 걸러서 insert 해줄거라고 생각했지만 아니였다..
해당 문제는 @DynamicInsert 어노테이션으로 해결했다.

@DynamicInsert 적용 후 jpql

    into
        media (filename, user_id) 
    values
        (?, ?)
profile
독자보다 필자를 위해 포스팅합니다

0개의 댓글