필드와 컬럼 매핑
엔티티 클래스의 각 필드에 여러 가지 옵션을 갖는 어노테이션을 붙여서 더 자세히 매핑할 수 있다.
Column 별 매핑 상세
@Column : 컬럼
DB 테이블의 각 컬럼 관련 제약사항 등을 추가할 수 있다.
@Enumerated : enum 타입
DB에는 enum 타입이 없기 때문에 속성을 지정할 수 있다.
enum은 기본적으로 숫자, 문자열 두 가지가 있다.
@Enumerated(EnumType.STRING)
private RoleType roleType;
EnumType.STRING으로 지정하면 실제 enum의 문자열이 저장되고,
EnumType.ORDINAL로 지정하면 enum 순서를 0부터 시작되는 숫자로 지정된다.
STRING이 권장되고, ORDINAL은 사용하지 않는 게 좋다.
@Temporal : 날짜 타입
TemporalType을 지정할 수 있다.
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
TemporalType에는 DATE(날짜), TIME(시간), TIMESTAMP(날짜와 시간)이 있다.
Java에서 일반적으로 사용하는 클래스와 기본적으로 매핑된다.
- LocalDate - DATE
- LocalTime - TIME
- LocalDateTime - TIMESTAMP
@Lob : 대용량 데이터
lob은 긴 text, 그래픽, 이미지 등 구조화되지 않은 대용량 데이터를 말한다.
길이 제한이 없는 긴 텍스트를 저장할 수 있다.
@Lob
private String description;
Lob의 종류에는 BLOB와 CLOB가 있는데,
BLOB은 이진 대형 객체(이미지, 동영상, 사운드 등)를 보관하는 용도이고,
CLOB은 문자 대형 객체(varchar의 범위를 벗어나는 긴 텍스트 등)를 보관하는 용도이다.
@Transient : DB와 매핑하지 않는 필드
해당 어노테이션이 붙은 필드는 DB와 매핑되지 않는다.
@Transient
private int tmp;
@Column
테이블의 각 column에 제약조건을 추가할 수 있다.
@Entity(name = "MEMBER")
public class Member {
@Id
private Long id;
@Column(name = "username", unique = true, length = 10)
private String name;
}
위의 예제에서 name 필드는 DB의 column "username"과 매핑되고, unique이고, 길이가 10인 제약조건이 추가된다.
위와 같은 방법으로 각 컬럼에 여러 가지 옵션을 부여할 수 있다.
@Column의 여러 옵션과 같은 제약조건들은 DDL을 자동 생성할 때만 사용되고,
JPA의 실행 로직에는 영향을 주지 않는다.
name
- 필드와 매핑할 테이블의 컬럼 이름
- 기본값은 객체의 필드명으로 설정된다.
insertable, updatable
- 등록, 변경 가능 여부
- 기본값은 true이다.
예를 들어 맨 처음 등록 한 값이 변경되면 안 되는 경우 아래와 같이 updatable = false로 설정할 수 있다.
@Column(updatable = false)
private String userId;
nullable(DDL)
- nullable = false로 설정하면 DDL 생성 시에 not null 제약조건이 추가된다.
unique(DDL)
- unique = true로 설정하면 DDL 생성 시에 unique 제약조건이 추가된다.
columnDefinition
- 데이터베이스에 럼 정보를 직접 입력할 수 있다.
@Column(columnDefinition = "varchar(100) default'EMPTY'")
private String username;
length
- 문자 길이 제약조건, String 타입에만 사용할 수 있다.
precision, scale(DDL)
- BigDecimal 타입에서 사용한다.
- precision : 소수점을 포함한 전체 자릿수
- scale : 소수의 자릿수
- 정밀한 소수를 다루어야 할 때 사용한다.
(참고) 인프런 - 김영한 님 '자바 ORM 표준 JPA 프로그래밍 - 기본 편'
https://www.inflearn.com/course/ORM-JPA-Basic
'JPA & QueryDSL' 카테고리의 다른 글
[JPA] 연관관계 매핑 - @OneToOne 일대일 매핑 (0) | 2023.10.06 |
---|---|
[JPA] 연관관계 매핑 - @ManyToOne, @OneToMany (0) | 2023.10.06 |
[JPA] @Entity - 기본 키 매핑 (1) | 2023.10.04 |
[JPA] 엔티티 매핑 (0) | 2023.10.04 |
[JPA] ORM, JPA, Hibernate, Spring Data JPA의 관계 (0) | 2023.10.03 |