8 : 20 개발실Log
홈
생각정리
방명록
8시20분 ::
8 : 20 개발실Log
방명록 남기기
[4장] 엔티티 매핑
책 스터디 정리/JPA ORM 스터디
2023. 4. 18. 22:50
JPA 대표 어노테이션
객체와 테이블 매핑: @Entity, @Table
기본 키 매핑: @Id
필드와 컬럼 매핑: @Column
연관 관계 매핑: @ManyToOne, @JoinColumn
1. @Entity
엔티티: Entity 어노테이션이 붙은 클래스 / JPA에서 관리
name
JPA에서 사용할 엔티티 이름 지정
기본값 : 클래스명
기본 생성자 필수
final/inner 클래스, enum, interface에는 사용 불가
저장할 필드에 final 사용불가
2. @Table
엔티티와 매핑할 테이블을 지정
name
매핑할 테이블 이름 지정
uniqueConstraints(DDL)
DDL 생성시 유니크 제약 조건 생성
2개 이상의 복합 유니크 제약도 가능
Schema 자동 생성으로 DDL 만들 때만 사용 가능
3. 데이터베이스 스키마 자동 생성
클래스의 매핑 정보로 DB 스키마를 자동 생성한다.
ddl-auto=create 속성 추가로 애플리케이션 실행 시점에 DB 테이블 자동 생성
show-sql 속성 true로 DDL 출력 가능
자동 생성되는 DDL은 설정한 DB마다 다르게 생성됨
운영 환경에서 사용할 만큼 완벽하지 않아서 참고 용도 사용하는 게 좋음
ddl-auto 속성
create: 기존 테이블 삭제 후 신규 생성
DROP + CREATE
create-drop: create 속성에 추가로 애플리케이션 종료시 생성한 DDL 제거
DROP + CREATE + DROP
update: DB 테이블과 엔티티 매핑 정보 체크해서 변경 사항만 수정
validate: DB 테이블과 엔티티 매핑 정보 비교해서 차이가 나면 경고 후 애플리케이션 실행 X
DDL 수정 X
none: 자동 생성 기능 사용하지 않으려면 속성 자체를 삭제 or 유효하지 않은 옵션 값 추가
운영 서버에서는 create, create-drop, update 사용하면 안됨
개발 환경에 따른 추천 전략
개발 초기: create/update
로컬 테스트/CI 환경: create/create-drop
테스트 서버: update/validate
스테이지/프로덕션: validate/none
4. DDL 생성 기능
@Column 어노테이션 length/nullable/unique 기능 → DDL 자동 생성시에만 사용 / JPA 실행 로직에는 영향 X
DDL을 직접 작성하는 경우 사용할 필요 X
개발자가 엔티티만 보고 제약 조건 파악 가능
자동 생성되는 DDL을 위한 기능 존재
5. 기본 키 매핑
JPA가 제공하는 DB 기본 키 생성 전략
직접 할당: 기본 키를 서버 애플리케이션에서 직접 할당
@Id 어노테이션만 사용시 직접 할당
자동 생성: 대리 키를 사용
@Id, @GeneterateValue 어노테이션 추가, 원하는 키 생성 전략 선택
DB 벤더에 의존
IDENTITY: 기본 키 생성을 DB에 위임
SEQUENCE: DB 시퀀스를 사용해서 기본 키 할당
DB 벤더에 상관없이 사용 가능
TABLE: 키 생성 테이블 사용 → 해당 테이블을 시퀀스처럼 사용
자동 생성 전략이 다양한 이유: DB 벤더마다 기본 키 지원하는 방식이 다름
오라클: 시퀀스 제공 vs MySQL: 시퀀스 제공 X, AUTO_INCREMENT 사용
5-1. 기본 키 직접 할당 전략
@Id로 매핑하여 기본키 할당
em.persist()로 엔티티 저장 전에 애플리케이션에서 직접 할당
식별자 값 없이 저장하면 예외 발생: JPA 표준에 정의되어 있지 않음
5-2. IDENETITY 전략
기본 키 생성을 DB에 위임
주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용
@GeneratedValue의 strategy 값을 GenerationType.IDENTITY로 지정 시 사용 가능
데이터를 DB에 INSERT 후에 기본 키 값을 조회 할 수 있음
트랜잭션을 지원하는 쓰기 지연이 동작하지 않음
5-3. SEQUENCE 전략
DB 시퀀스: 유일한 값을 순서대로 생성하는 DB 오브젝트
DB 시퀀스를 사용해서 기본 키를 생성
오라클, PostgreSQL, DB2, H2에서 사용
GenerationType.SEQUENCE로 설정 후, generator에 DB 시퀀스를 매핑한 생성기를 추가하여 사용
DB 시퀀스로 식별자 조회 후 엔티티에 할당 → 영속성 컨텍스트에 저장
INSERT 이전에도 식별자 조회 가능
DB 시퀀스로 식별자 조회하는 작업이 추가 발생(DB와 2번 통신)
DB 시퀀스에서 NEXTVAL 조회해서 기본 키 값으로 사용
엔티티 DB에 저장
5-4. TABLE 전략
키 생성 전용 테이블에 이름/값을 관리하여 DB 시퀀스를 모방함
모든 DB에서 적용가능
GenerationType.TABLE로 설정 후, generator에 키 용 테이블을 매핑한 생성기를 추가하여 사용
키를 관리하는 부분이 시퀀스가 아닌 테이블이라는 점을 제외한 SEQUENCE 전략과 동일
값을 조회하면서 SELECT, 값 증가를 위해 UPDATE 쿼리 사용 → DB와 한번 더 통신하는 단점 존재
5-5. AUTO 전략
@GeneratedStartegy의 기본 전략
DB를 변경해도 코드를 수정할 필요가 없음
SEQUENCE나 TABLE 전략으로 변경 시 시퀀스나 키 생성용 테이블을 미리 세팅해두어야 한다
5-6. 기본 키 매핑 정리
영속성 컨텍스트: 엔티티를 식별자 값으로 구분 → em.persist()시 과정
직접 할당
em.persist() 호출 전에 애플리케이션에서 직접 식별자 할당 필요
식별자가 없을 시 예외 발생
SEQUENCE
DB 시퀀스에서 식별자 값 획득 후 영속성 컨텍스트에 저장
TABLE
DB 시퀀스 역할을 하는 테이블에서 식별자 값 획득 후, 영속성 컨텍스트에 저장
IDENTITY
DB에 엔티티 저장 후, 식별자 값 획득 → 영속성 컨텍스트에 저장
공유하기
게시글 관리
8 : 20 개발실Log
저작자표시
'
책 스터디 정리
>
JPA ORM 스터디
' 카테고리의 다른 글
[7장] 고급 매핑
(0)
2023.05.09
[6장] 다양한 연관관계 매핑
(0)
2023.05.02
[5장] 연관관계 매핑 기초
(0)
2023.04.25
[3장] 영속성 관리
(0)
2023.04.11
[1장] JPA 소개
(0)
2023.04.04
티스토리툴바
8 : 20 개발실Log
구독하기
[4장] 엔티티 매핑
JPA 대표 어노테이션
1. @Entity
2. @Table
3. 데이터베이스 스키마 자동 생성
4. DDL 생성 기능
@Column 어노테이션 length/nullable/unique 기능 → DDL 자동 생성시에만 사용 / JPA 실행 로직에는 영향 X
5. 기본 키 매핑
JPA가 제공하는 DB 기본 키 생성 전략
5-1. 기본 키 직접 할당 전략
5-2. IDENETITY 전략
5-3. SEQUENCE 전략
5-4. TABLE 전략
5-5. AUTO 전략
5-6. 기본 키 매핑 정리
'책 스터디 정리 > JPA ORM 스터디' 카테고리의 다른 글