김영한님의 자바 ORM 표준 JPA 프로그래밍 책으로 공부하면서 정리했습니다.
@Entity 적용 시 주의사항
- 기본 생성자 필수
- 파라미터가 없는 public 또는 protected 생성자
- JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하므로 이 생성자는 반드시 있어야 한다.
- 자바의 경우, 생성자가 하나도 없으면 public Mmeber(){}
와 같은 기본 생성자를 자동으로 만든다.
- final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
- 저장할 필드에 final을 사용하면 안된다.
기본키 매핑
JPA 가 제공하는 데이터베이스 기본 키 생성 전략
직접 할당
- 기본 키를 애플리케이션에서 직접 할당한다.
- em.persist()
로 엔티티를 저장하기 전에 애플리케이션에서 기본 키를 직접 할당하는 방법
```java
Board board = new Board();
board.setId("id1");
em.persist(board)
```
자동 생성: 대리키 사용 방식
- IDENTITY
- 기본키 생성 전략을 데이터베이스에 위임한다.
- 데이터를 데이터베이스에 INSERT 한 후에 기본 키 값을 조회할 수 있다.
- SEQUENCE
- 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
- TABLE
- 키 생성 테이블을 사용한다.
- AUTO
- 데이터베이스 방언에 따라 IDENTITY, SEQUENCE, TABLE 전략 중 하나를 자동으로 선택한다.
- MySQL의 경우, IDENTITY 사용
- AUTO 의 장점은 데이터베이스를 변경해도 코드를 수정할 필요가 없음
자동 생성 전략이 다양한 이유는?
- 데이터베이스 벤더마다 지원하는 방식이 다르기 때문
권장하는 식별자 선택 전략
- 데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 함
- 1. null값 X
- 2. 유일해야 한다.
- 3. 변해선 안된다.
- 비즈니스에 의미가 있는 자연키보다는 임의로 만들어진 대리키(대체키)를 권장한다.