객체와 테이블 매핑
@Entity
- JPA가 관리하는 엔티티
- 기본 생성자 필수
- 저장할 필드에 final 사용하면 안됨
- 속성
: name -> JPA에서 사용할 엔티티 이름을 지정
@Table
속성
- name : 매핑할 테이블 이름
- catalog : 데이터베이스 catalog 매핑
- schema : 데이터베이스 스키마 매핑
- uniqueConstraints : DDL 생성 시 유니크 제약 조건 생성
데이터베이스 스키마 자동 생성
- DDL을 애플리케이션 실행 시점에 자동 생성 (ex. Insert into)
- 생성된 DDL은 개발 장비에서만 사용 (운영서버에서 사용X)
속성
- create : DROP + CREATE 기존 테이블 삭제 후 다시 생성
- create-drop : 종료 시점에 테이블 DROP
- update : 반영분만 반영 (alter table)
- validate : 정상적으로 매핑되었는지 확인
- none : 사용하지 않음
create, create-drop, update 절대 운영 서버에서 사용하지 말 것
필드와 컬럼 매핑
매핑 어노테이션
@Column
- name : 필드와 매핑할 테이블 컬럼 이름
- insertable, updatable : 등록, 변경 가능 여부 (컬럼 수정 -> DB에 반영할 것인지)
- nullable : null 값 허용 여부
- unique : 유니크 제약 조건
- columnDefinition : 컬럼 정보 직접 주기
- length : 문자 길이 제약조건
- precision, scale : 옵션
@Enumerated
자바 enum 타입 매핑할 때 사용
- value : ORDINAL(enum 순서 저장), STRING(enum 이름 저장)
@Temporal
날짜 타입을 매핑할 때 사용
- value : DATE(날짜, 데이터베이스 date 타입), TIME(시간, 데이터베이스 time 타입), TIMESTAMP(날짜와 시간, 데이터베이스 timestamp 타입)
기본 키 매핑
기본 키 매핑 어노테이션
기본 키 매핑 방법 : 직접 할당 (@Id 사용) / 자동 생성
IDENTITY 전략 - 특징
- 기본 키 생성을 데이터베이스에 위임 (id에 값을 넣으면 안됨)
- JPA는 트랜잭션 커밋 시점에 INSERT SQL 실행
- AUTO_INCREMENT : INSERT SQL을 실행 한 이후에 ID값을 알 수 있음
(영속성 컨텍스트에서 관리되려면 PK 값이 있어야함)
- IDENTITY 전략은 persist() 시점에 즉시 INSERT SQL 실행하고 DB에서 식별자 조회
SEQUENCE 전략
- 버퍼링 가능 (모아서 commit 시점에 query 날림)
속성
- name : 식별자 생성기 이름
- sequenceName : DB에 등록되어 있는 시퀀스 이름
- initialValue : DDL 생성 시에만 사용됨
- allocationSize : 시퀀스 한 번 호출에 증가하는 수
initialValue, allocationSize는 성능 최적화에 이용
- catalog, schema
IDENTITY / SEQUENCE 방식 비교해 보면 좋을 듯
TABLE 전략
- 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략
- 모든 데이터베이스에 적용 가능하지만 성능이 좋지 않음 (테이블을 직접 사용하기 때문)
권장하는 식별자 전략
- 기본 키 제약 조건 : null 아님, 유일함, 변하면 안됨
- 권장 : Long 형 (10억 넘어도 동작해야 함) + 대체키 (ex. 시퀀스) + 키 생성전략 사용 (auto_increment, sequence object, 랜덤 값)
'학습' 카테고리의 다른 글
[Java] JPA 강의 - 6 (다양한 연관관계 매핑) (0) | 2024.01.29 |
---|---|
[Java] JPA 강의 - 5 (연관관계 매핑 기초) (0) | 2024.01.18 |
[Java] JPA 강의 - 3 (영속성 관리) (0) | 2024.01.11 |
[Java] JPA 강의 - 1, 2 (JPA 소개) (0) | 2024.01.11 |
[Java] Arrays 클래스 (0) | 2023.10.17 |