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이라고 써줘야 한다.
'JPA' 카테고리의 다른 글
[JPA] Repository에서 DTO로 데이터 셋팅 @Query() (0) | 2024.02.22 |
---|---|
[JPA] Entity PK는 bigint(MySQL)-Long(java) 타입으로 해야 하는 이유 (0) | 2024.02.15 |
[JPA] @Setter 대신 @Builder 사용해야하는 이유 (1) | 2024.02.14 |
[JPA] jpa 메서드 (2) | 2024.02.12 |