Framework/Springboot

PostgresSQL 사용시 엔티티의 Default 값 설정하기

IFLA 2024. 2. 9. 09:00

목차

     

    스프링부트에서 Entity 를 선언을 하면 프로젝트가 실행될 때 없는 테이블이 있는 경우에는 테이블을 생성한다. 테이블을 생성할 때 default 값이라고 설정한 값이 추가가 안 된다.

     

    package com.study.file_upload.entity;
    
    import jakarta.persistence.*;
    import lombok.AccessLevel;
    import lombok.Builder;
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import org.hibernate.annotations.ColumnDefault;
    import org.hibernate.annotations.DynamicInsert;
    import org.springframework.data.annotation.CreatedDate;
    
    import java.time.LocalDateTime;
    
    @Entity
    @Getter
    @DynamicInsert
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public class UploadFile {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id", updatable = false, unique = true)
        private long id;
    
        @Column(name = "original_name", nullable = false)
        private String originalName;
    
        @Column(name = "save_name", nullable = false)
        private String saveName;
    
        @Column(name = "size", nullable = false)
        private long size;
        
        @ColumnDefault("N")
        @Column(name = "delete_yn")
        private String deleteYn;
    
        @CreatedDate
        @Column(name = "created_at")
        private LocalDateTime createdAt;
    
        @Builder
        public UploadFile(String originalName, String saveName, long size) {
            this.originalName = originalName;
            this.saveName = saveName;
            this.size = size;
        }
    }

     

    이 코드에서 delete_yn 컬럼의 @ColumnDefault 를 이용하면 Default 값을 설정할 수 있지만 insert 로 추가될 때 값이 추가된다. 테이블 생성할 때는 추가가 안되는 걸 콘솔창에서 확인할 수 있다.

     

     

    @Column(columnDeifinition = "varchar(255) default 'N'") 으로 @Column 어노테이션의 속성에 추가를 하면 테이블 생성시 default 값이 추가된다.