엔티티 매핑에 대해 알아보자
@Entity와 @Table 어노테이션
위와 같이 선언하면, MBR이라는 데이터베이스의 테이블을 매핑한다.
Hibernate DDL 생성 옵션
hbm2ddl.auto 옵션은 다음과 같이 설정할 수 있다:
- create: 기존 테이블을 삭제하고 다시 생성
- create-drop: 애플리케이션 종료 시 테이블 삭제
- update: 변경된 내용만 반영 (삭제는 하지 않음)
- validate: 엔티티와 테이블이 정상적으로 매핑되었는지 확인
권장 사용 시점
- 개발 초기: create 또는 update
- 테스트 서버: update 또는 validate
- 스테이징과 운영 서버: validate 또는 none
주의: 운영 서버에서는 절대 create, create-drop, update를 사용하지 말 것. 문제를 야기할 수 있다.
DDL 생성 기능
이와 같은 어노테이션은 런타임 시에는 영향을 주지 않으며, JPA 실행 로직에는 영향을 미치지 않는다.
필드와 컬럼 매핑
Enum 타입 매핑
데이터베이스에는 enum 타입이 없기 때문에 다음과 같이 매핑한다:
큰 문장 데이터 매핑
긴 텍스트를 저장하고 싶다면 다음 어노테이션을 사용한다:
BigDecimal 타입 매핑
정밀한 숫자 데이터를 다룰 때:
EnumType 기본 설정
기본적으로 EnumType은 숫자로 저장되지만, 문자열로 저장하기 위해서는 다음과 같이 설정해야 한다:
주의: 숫자로 설정할 경우, enum에 데이터 추가 시 순서상의 오류로 인해 문제가 발생할 수 있다. 따라서 문자열로 설정하는 것이 안전하다.
매핑 제외 필드
데이터베이스와 매핑을 원하지 않는 필드에는 다음 어노테이션을 사용한다:
기본키 매핑 전략
IDENTITY 전략
이 설정은 데이터베이스가 자동으로 키 값을 증가시키도록 한다.
SEQUENCE 전략
반복문 배열의 인덱스처럼 원하는 형태로 키 값을 설정할 수 있다.
AUTO_INCREMENT 사용
가장 일반적으로 사용된다.
IDENTITY 전략의 문제점
IDENTITY 전략을 사용할 경우, 데이터베이스에 삽입되기 전에는 ID 값이 null이 된다. 이 문제는 jpa가 identity로 설정되어 있따느 것을 알게 되면 em.persist() 시점에 바로 insert 쿼리문을 실행하여 해결할 수 있다.
이렇게 엔티티 매핑에 대해 기본적인 개념들을 정리해보았다. 실무에서 적용할 때에는 각 상황에 맞는 매핑 전략을 선택하고, 데이터베이스 설정을 신중히 해야 한다.
'JAVA > JPA' 카테고리의 다른 글
인프런 JPA 6화 다양한 연관관계 매핑 "김영한 강사" -PlusUltraCode- (0) | 2024.07.20 |
---|---|
인프런 JPA 5화 연관관계 매핑 기초 "김영한 강사" -PlusUltraCode- (0) | 2024.07.20 |
인프런 JPA 3화 영속성 컨텍스트 "김영한 강사" -PlusUltraCode- (0) | 2024.07.19 |
인프런 JPA 2화 생성,삭제,수정 "김영한 강사" -PlusUltraCode- (0) | 2024.07.19 |
인프런 김영한의 JPA 1화 (0) | 2024.07.18 |