본문 바로가기
JPA

[JPA] jpa insert시 default 적용

by 개발LOG 2024. 2. 13.

jpa 엔터티 default 설정을 하려면 @DynamicInsert 어노테이션과 @ColumnDefault 어노테이션을 같이 써야 적용이 된다. 

예시코드(java):

package com.pnow.domain;

import com.pnow.domain.user.User;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalTime;
@Setter //jpa 테스트를 위해
@Getter
@Entity
@DynamicInsert //@ColumnDefault 사용하려고
public class Reservation {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "reservation_id")
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name = "store_id")
    private Store store;

    @Column(nullable = false)
    private LocalDate reservationDate; // 예약 날짜

    @Column(nullable = false)
    private LocalTime reservationTime; // 예약 시간

    @ColumnDefault("1") // default 1
    @Column 
    private int guestCount; // 인원 수

    @ColumnDefault("'WAITING'") // default 'WAITING'
    @Enumerated(EnumType.STRING)
    @Column 
    private ReservationStatus reservationStatus; // 예약 상태:WAITING,COMPLETE 기본값은 'WAITING'
}

 

@ColumnDefault 어노테이션을 칼럼에 사용 시 주의해야 할 점은 디폴트값을 지정할 때 ""큰따옴표 안에 써줘야 한다. 만약 숫자면 @ColumnDefault("1") 이렇게 써주고, 문자열이면 @ColumnDefault("'문자열'") 이라고 써주면 된다.

 

또 한가지 주의할 점은, 디폴트를 적용시킬 땐    @Column(nullable = false)과 같이 NOT NULL 적용이 안된다.

따라서 @Column이라고 써줘야 한다.