일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- clonecoding
- TODO
- 영속성 컨텍스트
- 장고독학
- React
- 다대다
- html
- nomadcoder
- css
- JPA
- 다대일
- AWS
- 트랜잭션
- python
- ORM
- 일대다
- 프론트엔드
- javascript
- 노마드코더
- web
- 매핑
- frontend
- 플러시
- 단방향
- JS
- java
- Django
- 바닐라js
- 장고
- SBERT
- Today
- Total
꿈꾸는 새벽하늘
04장. 엔티티 매핑 본문
1. @Entity
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여주어야 한다.
@Entity 적용 시 주의사항
- 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)
- final 클래스, enum, interface, inner 클래스에 사용 불가
- 저장할 필드에 final 사용하면 안 됨
2. @Table
@Table은 엔티티와 매핑할 테이블을 지정한다.
3. 데이터베이스 스키마 자동 생성
JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지원한다.
persistence.xml에 아래 속성을 추가하면 애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성한다.
<property name="hibernate.hbm2ddl.auto" value="create" />
4. 기본 키 매핑
JPA는 데이터베이스 기본 키 생성 전략을 두 가지 제공한다.
- 직접 할당: 기본 키를 애플리케이션에서 직접 할당
- 자동 생성: 대리 키 사용 방식
- IDENTITY: 기본 키 생성을 데이터베이스에 위임
- SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키 할당
- TABLE: 키 생성 테이블 사용
데이터베이스 벤더마다 지원하는 방식이 다르므로 자동 생성 방식은 다양하다.
1) 기본 키 직접 할당 전략
기본 키 직접 할당은 @Id로 매핑하는 방식이다.
@Id
@Column (name = "id")
private String id;
기본 키 직접 할당 전략은 em.persist()로 엔티티를 저장하기 전에 애플리케이션에서 기본 키를 직접 할당하는 방법이다.
Board board = new Board();
board.setId("id1"); // 기본 키 직접 할당
em.persist(board);
2) IDENTITY 전략
IDENTITY는 기본 키 생성을 데이터베이스에 위임하는 전략으로, 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다.
IDENTITY 전략은 @GeneratedValue의 strategy 속성 값을 GenerationType.IDENTITY로 지정하여 사용할 수 있다.
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
3) SEQUENCE 전략
SEQUENCE 전략은 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트인 데이터베이스 시퀀스를 사용해서 기본 키를 생성하는 전략이다.
이 전략은 시퀀스를 지원하는 Oracle, PostgreSQL, DB2, H2에서 사용 가능하다.
@Entity
@SequenceGenerator (
name = "BOARD_SEQ_GENERATOR",
sequenceName = "BOARD_SEQ",
initialValue = 1,
allocationSize=1)
public class Board {
@Id
@GeneratedValue (strategy = GenerationType.SEQUENCE,
generator = "BOARD_SEQ_GENERATOR")
private Long id;
...
}
4) TABLE 전략
TABLE 전략은 키 생성 전용 테이블을 하나 만든 뒤, 이름과 값으로 사용할 컬럼을 만들어 데이터베이스 시퀀스를 흉내내는 전략이다.
// TABLE 전략 키 생성 DDL
create table MY_SEQUENCES (
sequence_name varchar(255) not null,
next_val bigint,
primary key ( sequence_name )
)
@Entity
@TableGenerator (
name = "BOARD_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = "BOARD_SEQ",
allocationSize=1)
public class Board {
@Id
@GeneratedValue (strategy = GenerationType.TABLE,
generator = "BOARD_SEQ_GENERATOR")
private Long id;
...
}
5) AUTO 전략
AUTO 전략은 데이터베이스를 변경해도 코드를 수정하지 않아도 된다는 장점이 있다.
@Id
@GeneratedValue (strategy = GenerationType.AUTO)
private Long id;
5. 기본 키 매핑 정리
식별자 할당 전략별로 em.persist() 호출 직후에 발생하는 일을 정리하면 다음과 같다.
- 직접 할당: em.persist() 호출 전에 애플리케이션에서 직접 식별자 값을 할당해야 한다. 식별자 값이 없으면 예외가 발생한다.
- IDENTITY: 데이터베이스에 엔티티를 저장해서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다.
- SEQUENCE: 데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다.
- TABLE: 데이터베이스 시퀀스 생성용 테이블에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다.
'🌿 Spring & Spring Boot > 📗 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
06장. 다양한 연관관계 매핑 (0) | 2023.07.03 |
---|---|
05장. 연관관계 매핑 기초 (0) | 2023.06.26 |
03장. 영속성 관리 (0) | 2023.05.29 |
02장. JPA 시작 (0) | 2023.05.22 |
01장. JPA 소개 (0) | 2023.05.22 |