JPA로 코드를 작성하며 자주 나오고 가장 기본적인 어노테이션들이다. 따라서 이 어노테이션들을 정리하려고 한다.
@Entity 어노테이션은 테이블과 매핑
을 해주는 어노테이션으로, @Entity가 붙은 클래스는 JPA가 관리한다.
@Entity 어노테이션의 속성에는 name이 있다.
name의 속성에서는 JPA
에서 사용할 엔티티 이름
을 지정한다. 보통은 기본값인 클래스명을 사용한다.
엔티티와 매핑할 테이블
을 지정한다. 생략 시 매핑한 엔티티 이름을 테이블명으로 사용한다. 속성으로는 name, catalog, schema, uniqueConstraints가 있다.
name
catalog
schema
uniqueConstraints
unique
제약조건을 건다.@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int boardId;
@Id
어노테이션은 위와 같이 사용한다. @Id 어노테이션은 식별자 필드
로, 엔티티의 필드를 테이블의 기본 키 (PK, Primary key)에 매핑
하는 역할을 한다.
속성
에 직접 @Id를 붙여주면 실행 시점에 객체의 필드
를 통해 직접 접근하게 하는 거싱며, getter
를 이용하려면 getter에 @Id
를 붙여준다. 속성에 부여하게 되면 setter/getter 없이도 작업 가능하다. 하지만, setter
에 @Id를 붙이면 예외가 발생한다.
위의 코드에서 보면 boardId
가 @Id
를 통해 해당 테이블의 PK로 매핑될 것임을 짐작할 수 있다.
GeneratedValue 어노테이션은 어노테이션명처럼 자동 생성
을 도와준다. 즉 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로는 generator
와 strategy
가 있다.
strategy
는 persistence provider가 엔티티의 주키를 사용할
때 사용해야 하는 주키생성 전략을 의미한다. 이때 strategy의 기본값은 AUTO
이다. generator
는 SequenceGenerator
나 TableGenerator
어노테이션에서 명시된 주키 생성자를 재사용
할 때 사용한다. 디폴트 값은 ""
이다.
주키 생성 전략을 뜻하는 strategy 속성에는 4가지를 지원한다.
AUTO (default)
IDENTITY
@GeneratedValue(strategy = GenerationType.IDENTITY)
SEQUENCE
@GeneratedValue(strategy = GenerationType.SEQUENCE)
TABLE
@GeneratedValue(strategy = GenerationType.TABLE)
엔티티의 필드를 테이블의 칼럼에 매핑
한다.
@Column(nullable = false, length = 255)
private String contents;
@Column 어노테이션의 선택적 속성으로는 name, nullable, length가 있다.
name
테이블의 칼럼 이름
필드 이름
이다.nullable
length
String
타입에서만 적용 가능하다.