Entity 클래스를 생성하여 데이터베이스 테이블과 매핑하기 위해 사용되는 어노테이션은 아래와 같다.
Entity 매핑
@Entity : JPA가 관리하여 테이블과 매핑되는 클래스이다. public 또는 protected생성자가 필요하다. final, enum, interface, inner 클래스는 엔티티로 사용할 수 없다.
@Entity
@Table : 엔티티와 매핑할 테이블을 지정한다.
@Table(
name="테이블 명",
catalog="카탈로그명(MariaDB나 MySQL은 데이터베이스 이름이 사용됨)",
schema="테이블이 속할 스키마 지정",
uniqueConstraints={@UniqueConstraint(columnNames ={"유일한 값 보장 컬럼"})})
Field와 Column 매핑
@Column : 객체 필드를 테이블 컬럼에 매핑한다. @Column의 경우 별다른 옵션을 설정하지 않을 때는 생략이 가능하다.
@Column(
name="컬럼명",
insertable=true, // 컬럼 삽입 시에 DB에 추가할 것인가
updatable=true, // update 시에 해당 컬럼을 반영할 것인가
nullable=true, // Null 값을 허용할 것인가
unique=false, // 한 컬럼에 간단히 유니크 제약조 건을 적용할 때 사용
length=255 // 문자 길이 제약 조건을 설정할 때 사용(String 타입)
columnDefinition="VARCHAR(100) default 'EMPTY'" // 직접 컬럼정보를 작성할 때 사용
precision=숫자 // BigDecimal, BigInteger에서 숫자 컬럼의 전체 자리수를 지정
scale=숫자 // BigDecimal에서 소수점 아래 자리수를 지정
)
@Enumerated : enum형태로 되어있는 값을 데이터 타입으로 사용하고자 할 때 사용한다. enum 이름을 데이터베이스에 저장한다.
@Lob : DB에서 VARCHAR를 넘는 용량이 큰 내용을 넣고 싶은 경우에 사용된다. 타입이 문자열일 경우 CLOB, 그 외 BLOB과 매핑된다.
@Transient : 특정 필드를 컬럼에 매핑하지 않아, 메모리상에서만 임시로 값을 보관한다.
@Enumerated(EnumType.String)
@Lob
@Transient
기본 키 매핑
@Id : 직접 기본키를 할당한다. 기본키로 사용할 필드에 @Id를 작성한다.
@GeneratedValue : 기본키를 자동 생성하는 방식이다.
- Identity : 기본 키 생성을 DB에 위임
- Sequence : DB Sequence를 사용해 기본 키를 할당 @SequenceGenerator을 사용하여 Sequence를 명시 후 사용
- Table : 키 생성 전용 테이블을 사용하는 방식
- UUID : 16바이트의 랜덤한 숫자로 표현되며, 전 세계적으로 유일한 값을 생성하는데 사용
- 컬럼 타입은 가급적 binary(16)으로 생성한다. UUID는 버전이 1부터 5까지 있으며, Hibernate에서는 버전1과 버전2를 default로 제공한다. 버전1의 경우 MAC 주소를 기반으로 생성되며, 버전2의 경우에는 버전1에서 확장된 형태로 MAC 주소와 타임스탬프 및 사용자/그룹 식별자가 포함된다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY | SEQUENCE | TABLE )
@GeneratedValue(generator="uuid")
@GenericGenerator(name="uuid", strategy="uuid2")
@Column(columnDefinition="binary(16)")