엔티티 관련 기본 어노테이션
엔티티를 작성할 때 어노테이션을 많이 사용한다. 테이블과 매핑하기 위해 사용하는 어노테이션도 있고, 다른 테이블과의 연관관계를 정의하기 위해 사용하는 어노테이션, 자동으로 값을 주입하기 위한 어노테이션도 있다.
기본적이고 많이 사용하는 어노테이션을 소개하겠다.
@Entity
: 해당 클래스가 엔티티임을 명시하기 위한 어노테이션이다. 클래스 자체는 테이블과 일대일로 매칭되고, 해당 클래스의 인스턴스는 매핑되는 테이블에서 하나의 레코드를 의미한다.
@Table
: 엔티티 클래스는 테이블과 매핑되므로 특별한 경우가 아니면 @Table 어노테이션이 필요하지는 않다. @Table 어노테이션을 사용하는 경우는 클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우이다. @Table 어노테이션을 명시하지 않으면 테이블의 이름과 클래스의 이름이 동일하다는 의미이고, 서로 다른 이름을 쓰려면 @Table(name = 값) 형태로 데이터베이스의 테이블명을 명시해야 한다. 대체도 자바의 명명법과 데이터베이스가 사용하는 명명법이 다르기 때문에 자주 사용되곤 한다.
@Id
: 엔티티 클래스의 필드는 테이블의 칼럼과 매핑된다. @Id 어노테이션이 선언된 필드는 테이블의 기본값 역할로 사용된다. 모든 엔티티는 @Id 어노테이션이 필요하다. 꼭 기억하기!
@GeneratedValue
: 일반적으로 @Id 어노테이션과 함께 사용된다. 이 어노테이션은 해당 필드의 값을 어떤 방식으로 자동으로 생성할지 결정할 때 사용한다. 값 생성 방식은 아래와 같다.
1) GeneratedValue를 사용하지 않는 방식(직접 할당)
2) AUTO
3) IDENTITY
4) SEQUENCE
5) TABLE
Column
: 엔티티 클래스의 필드는 자동으로 테이블 칼럼으로 매핑된다. 그래서 별다른 설정을 하지않을 예정이라면 이 어노테이션을 명시하지 않아도 된다.
@Column 어노테이션에서 많이 사용 요소는 아래와 같다.
1) name : 데이터베이스의 칼럼명을 설정하는 속성. 명시하지 않으면 필드명으로 지정
2) nullable : 레코드를 생성할 때 칼럼 값에 null 처리가 가능한지를 명시하는 속성
3) length : 데이터베이스에 저장하는 데이터의 최대 길이를 설정
4) unique : 해당 칼럼을 유니크로 설정
@Transient
: 엔티티 클래스에는 선언돼 있는 필드지만 데이터베이스에서는 필요 없을 경우 이 어노테이션을 사용하여 데이터베이스에서 이용하지 않게 할 수 있음.