객체 - 테이블 매핑
@Entity
- JPA를 사용하여 테이블과 매핑할 클래스에 붙인다.
- name 속성을 통해 이름을 지정할 수 있는데, 디폴트 값은 클래스명이다.
- 기본 생성자는 필수로 있어야한다.
(기본생성자: 매개변수 없는 public이나 protected 생성자)
생성자가 하나도 없으면 자바에서 만들어주지만, 하나 이상 있으면 자바에서 만들어주지 않으므로 기본 생성자를 따로 직접 만들어준다.
@Table
- 엔티티와 매핑할 테이블을 지정한다. @Table 어노테이션을 생략하면 엔티티 이름을 그대로 테이블 이름으로 정한다. name 속성을 통해 매핑할 테이블명을 지정할 수 있다.
기본 키 매핑
@Id
기본 키 매핑
@GeneratedValue
예시) @GeneratedValue(strategy = GenerationType.IDENTITY)
※ 식별자 할당 strategy
- 직접 할당
em.persist()로 데이터베이스에 저장하기 전에 직접 식별자를 할당한다.
- IDENTITY
데이터베이스에서 기본키를 자동으로 생성해주고 JPA는 이 기본 키 값을 얻어오기 위해 추가로 데이터베이스를 조회하게 된다.따라서 객체를 생성하고 em.persist(객체)를 통해 데이터베이스에 저장이 되어야 해당 객체의 아이디 값을 가져올 수 있다.
- SEQUENCE
데이터베이스 시퀀스에서 기본키 값을 얻고 영속성 컨텍스트에 저장한다.
- TABLE
데이터벵스 시퀀스 생성용 테이블에서 기본키 값을 얻고 영속성 컨텍스트에 저장한다.
- AUTO
선택한 데이터베이스 방언에 따라 위 세가지 중 자동으로 하나가 선택된다.
※ 기본키 선택 strategy
- 자연키(natural key)
ex. 주민등록번호
- 대리키(surrogate key = 대체키)
ex. auto_increment
=> 자연키는 변할 수 있으므로 되도록이면 대리키를 사용하자.
필드와 컬럼 매핑
@Column
객체 필드를 테이블 컬럼에 매핑할 때 사용. nullable, length 등등 속성이 있다.
@Enumerated
엔티티 클래스에서 자바의 enum타입 사용시 다음과 같이 사용. ORDINAL과 STRING이 있음. ORDINAL은 저장된 순서를 바꿀 수 없어서 되도록이면 STRING을 사용하자.
@Enumerated(EnumType.STRING)
private Category category;
@Transient
필드를 매핑하지 않으려 할 때 사용.
연관관계 매핑