@Column
객체의 필드를 테이블 컬럼에 매핑시켜 주는 어노테이션이다.
주요 속성
속성 | 기능 | 기본값 |
name | 필드와 매핑할 테이블의 컬럼 이름을 지정한다. | 객체의 필드명 |
nullable(DDL) | null값 허용 여부를 설정한다. false로 설정하면, DDL 생성 시 not null 조건이 붙는다. |
true |
unique(DDL) | @Table의 uniqueConstraints와 같으나 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다. |
false |
columnDefinition(DDL) | 데이터베이스 컬럼 정보를 직접 줄 수 있다. | |
length(DDL) | 문자열 길이 제약조건; String 타입에만 사용한다. | 255 |
사용 예시
@Enumerated
속성
속성 | 기능 | 기본값 |
value | EnumType.ORDINAL: enum 순서를 DB에 저장한다. EnumType.STRING: enum 이름을 DB에 저장한다. |
EnumType.ORDINAL |
EnumType.ORDINAL
enum에 정의된 순서대로 DB에 저장된다.
저장되는 데이터 크기가 작지만, 이미 저장된 enum의 순서를 변경할 수 없다.
DB에 저장될 때 순서가 뒤죽박죽 섞일 수 있기 때문에 EnumType.STRING을 쓰는 게 좋다.
EnumType.ORDINAL 예시
//enum class 정의
public enum RoleType {
USER, ADMIN
}
//enum 타입 사용
@Enumberated(EnumType.ORDINAL)
private RoleType roleType;
enum 클래스에서 정의된 순서대로 USER는 0으로, ADMIN은 1로 저장된다.
RoleType이 각각 USER, ADMIN인 멤버 객체들을 저장하면 아래와 같다.
이때, enum 클래스에서 맨 앞에 GUEST를 추가한다고 해보자.
// 맨 앞에 GUEST를 추가로 정의
public enum RoleType {
GUEST, USER, ADMIN
}
//GUEST 타입의 멤버 객체를 저장
Member member = new Member();
member.setId();
member.setUsername("C");
member.setRoleType(RoleType.GUEST);
GUEST 타입의 Member 객체가 저장될 때, ROLETYPE이 0으로 저장된다.
ROLETYPE이 USER와 GUEST로 다른데, 둘 다 0으로 저장됐다는 문제가 생긴다.
EnumType.STRING
enum 이름이 저장되므로, 저장된 enum 순서가 바뀌거나 enum이 추가되어도 안전하다.
EnumType.SRING 예시
@Enumerated(EnumType.STRING)
private RoleType roleType
문자열이 저장되므로, 추가 데이터를 넣어도 순서에 의한 문제가 없다.
@Lob
데이터베이스의 BLOB, CLOB 타입과 매핑된다.
varchar를 넘어선 큰 데이터를 넣고 싶을 때 사용한다.
@Lob에는 지정할 수 있는 속성이 없다.
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB으로 매핑한다.
@Transient
특정 필드를 데이터베이스 필드와 매핑하지 않을 때 사용한다.
데이터베이스에 저장되지 않기 때문에 조회 역시 안된다.
메모리 상에서만 임시로 값을 보관하고 싶을 때 쓰인다.
Reference
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자
www.inflearn.com