[JPA] 엔티티 매핑

Done is better than perfect·2021년 8월 29일
0

JPA

목록 보기
7/12
post-thumbnail

JPA는 기본적으로 객체와 테이블 간의 매핑으로 모든 작업을 시작한다.
이번 편에서는 가볍게 이런 매핑을 도와주는 몇가지를 정리해보고자 한다.
(인프런 김영한님의 JPA강좌 강의자료를 보고 다시 한번 개인적으로 정리하는 용도입니다.)

@Entity

  1. 클래스 위에 붙이면 그때부터 이 클래스는 JPA가 관리하며, 엔티티라고 부른다.
  2. 당연한 얘기지만 @Entity를 붙이지 않은 클래스는 말 그대로 그냥 자바의 클래스일뿐이며, JPA가 관리하지 않는다.

※ 주의사항 ) 기본 생성자는 필수(Public 또는 Protected 생성자)

@Entity의 속성
1. name
- JPA에서 사용할 엔티티 이름
- 따로 작성 안하면 기본값은 클래스 이름 그대로 사용
- 동일한 이름의 클래스가 없다면 가급적 기본값으로 사용 추천

@Table

  1. 엔티티와 매핑할 테이블명 지정

@Table의 속성
1. name : 매핑할 테이블 이름
2. catalog : 데이터베이스 catalog 매핑
3. schema : 데이터베이스 schema 매핑
4. uniqueConstraints : DDL 생성 시에 유니크 제약 조건 생성

데이터베이스 스키마 자동생성 - 속성

hibernate.hbm2ddl.auto
1. create : 실행 시점에 기존테이블 삭제 후 다시 생성 (DROP -> CREATE)
2. create-drop : create와 비슷하나 종료시점에 테이블 DROP
3. update : 변경된 사항만 반영(운영DB에는 사용 X)
4. validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
5. none : 아무것도 사용X

※ 주의사항
- 운영장비에는 절대 create, create-drop, update 사용 X
- 테스트 서버는 update 또는 validate
- 스테이징과 운영서버는 validate 또는 none

매핑 어노테이션 정리

@Column : 컬럼 매핑

@Temporal : 날짜 타입 매핑

@Enumerated : enum 타입 매핑

@Lob : BLOB, CLOB 매핑

@Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

각각의 매핑 어노테이션에는 또 다양한 속성들이 존재, 속성은 필요할 때 찾아보는 식으로!

기본 키 매핑 어노테이션

@Id

@GeneratedValue

기본 키 매핑 방법
1. 직접 할당 : @Id만 사용
2. 자동생성 : @GeneratedValue 함께 사용
- IDENTITY : 데이터베이스에 위임(DBMS마다 고유적으로 Sequence 할당에 사용하는 방법 있음), 예를 들면 MySql의 AUTO_INCREMENT
- SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용(ORACLE에서 사용하는 방법), @SequenceGenerator 필요
- TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용(나는 이렇게 사용하는건 본적 없다)
- AUTO : 방언에 따라 자동 지정, 기본값


여기까지 JPA에서 엔티티와 테이블을 매핑하는데 필요한 간략한 어노테이션과 속성들을 알아보았다. JPA를 공부하면서 느낀점은 이 부분까지는 굳이 달달 외우려고 노력하지 않아도 JPA를 사용하다보면 자주 사용하는것들은 자연스럽게 외워지지 않을까 싶은데, 정작 중요한것은 연관관계 매핑이다.

이전에도 말했다시피, JPA와 DB는 연관관계를 매핑하는 부분부터 패러다임의 차이가 발생하기 때문에 외래키로 테이블간의 관계를 맺는 DB와 달리 객체는 이러한 부분을 어떻게 풀어넀는지가 중요할 것이다. 이 부분은 JPA 사용의 핵심이라고 할 수 있는데, 다음 글부터 한번 제대로 정리해보고싶다. 끝!

0개의 댓글