JPA를 사용하는데 가장 중요한 것은 엔티티와 테이블을 정확히 매핑하는 것이다. 따라서 매핑 어노테이션은 모두 숙지하고 사용할줄 알아야한다.
JPA는 다양한 매핑 어노테이션을 제공하는데 크게 4가지로 나눌 수 있다.
- 객체와 테이블 매핑 - @Entity, @Table
- 기본 키 매핑 - @Id
- 필드와 컬럼 매핑 - Column
- 연관관계 매핑 - @ManyToOne, @OneToMany
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 무조건 사용해야한다. @Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 엔티티라고 부른다.
- name - JPA에서 사용할 엔티티의 이름을 지정한다.
- 기본 생성자 필수
- final, enum, interface, inner 클래스 사용 안됨
- 저장할 필드에 final 사용 금지
JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하므로 생성자는 무조건 있어야 한다.
@Table은 엔티티와 매핑할 테이블을 지정한다.
- name - 매핑할 테이블 이름
- catalog - catalog 기능이 있는 데이터베이스에서 catalog 매핑
- schema - schema 기능이 있는 데이터베이스에서 schema를 매핑
- uniqueConstraints - DDL 생성 시에 유니크 제약조건을 만듦
영속성 컨텍스트는 엔티티를 식별자 값으로 구분하므로 엔티티를 영속 상태로 만들려면 식별자 값이 반드시 있어야 한다. persist( ) 메서드를 호출한 직후, 발생하는 일을 식별자 할당 전략별로 정리하면 다음과 같다.
- 직접할당 - persist( )를 호출하기 전에 애플리케이션에서 직접 식별자 값을 할당 해야함
- SEQUENCE - DB 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장
- TABLE - DB 시퀀스 생성용 테이블에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장
- IDENTITY - DB에 엔티티를 저장해서 식별자 값을 획득한 후 영속성 컨텍스트에 저장
데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다.
- NULL값은 허용하지 않는다.
- 유일해야 한다.
- 변해선 안 된다.
오늘은 @Entity와 @Table, PK 매핑에 대해서 알아보았다. 다음에는 연관관계 매핑에 대해서 알아보자