본문 바로가기
Back-end/JPA 개념

4. Entity Mapping

by devraphy 2022. 3. 25.

0. 개요

- 이번 포스팅에서는 JPA의 가장 기본이 되는 Entity Mapping에 대해서 알아보자.

 

1. Entity Mapping

- DB의 테이블을 Java 클래스로 표현한 것을 Entity라고 한다.

- JPA는 이 Entity 객체를 이용하여 DB에게 데이터를 전달하거나, DB로부터 가져온 데이터를 담는다.

- 즉, DB 테이블의 내용(column)이 일대일 대응하도록, Java 클래스로 구현한 것이다.

 

2. Entity Mapping을 위한 Annotation

a) @Entity

- @Entity가 붙은 클래스는 JPA가 관리하는 Entity이다.

- 그러므로 테이블과 매핑할 클래스는 반드시 @Entity를 부착해야 한다.

 

- @Entity 사용에 대해 몇 가지 주의사항이 있다.

  → 기본 생성자 필수(= 파라미터가 없는 public 또는 protected 접근 지정자 사용)

  → final 클래스, enum, interface, inner 클래스 사용 불가

  → 저장할 필드에는 final 키워드 사용 불가 

 

- @Entity는 name 옵션을 사용하여 JPA에서 사용할 Entity의 이름을 지정할 수 있다.

- name 옵션의 기본 값(default)은 클래스의 이름을 그대로 사용한다.

- 이름이 중복되지 않는다면 일반적으로 name 옵션을 사용하지 않는다.

 

b) @Table

- Java 클래스(= Entity)와 매핑할 DB 테이블을 지정하는 annotation이다.

- @Table도 name 옵션으로 매핑할 DB 테이블의 이름을 지정할 수 있다.

- name 옵션의 기본값은 @Entity의 이름을 사용한다.

 

- 이 외에도 @Table은 몇가지 옵션을 갖는다.

  1. catalog - 매핑할 DB의 catalog를 지정한다.

  2. schema - 매핑할 DB의 schema를 지정한다.

  3. uniqueConstraints - DDL 생성 시, 유니크 제약 조건을 지정한다. 

 

c) DDL 자동 생성 기능

- DDL 자동 생성 기능이란, Entity의 정보를 바탕으로 DB의 테이블을 생성하는 기능이다.

- JPA에서는 persistence.xml 파일에 설정하여 이 기능을 사용할 수 있다.

 

* DDL(= Data Definition Language)

  → 데이터 정의어 또는 데이터 정의 언어라고 부른다.

  → DB 테이블의 구조 또는 관계를 생성하는 CREATE, ALTER, DROP, TRUNCATE 등의 명령어를 가리킨다.

 

* DDL 옵션(= DB 스키마 자동 생성)

  → persistence.xml 에서 다음과 같은 방식으로 DDL 옵션을 설정할 수 있다.

<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.hbm2ddl.auto" value="none" />

  1. create: 기존 테이블을 삭제(Drop) 후 다시 생성(Create)

  2. create-drop: CREATE 옵션과 동일하지만 app 종료 시점에서 테이블 내용을 삭제한다.

  3. update: 엔티티 객체의 변경 내용을 DB 테이블에 반영한다. 

  4. validate: 엔티티와 DB 테이블이 정상적으로 매핑되었는지 확인한다.

  5. none: DDL 옵션을 사용하지 않는다.

 

* 사용을 지양하자. 너무 위험하다.

  → DDL 옵션 또는 스키마 자동생성 기능은 반드시 개발 또는 테스트 서버에서 사용해야 한다.

  → 특히 운영 서버에서 DDL 옵션을 사용하더라도 validate 또는 none 옵션 정도가 최선이다.

  → create와 create-drop은 운영 서버의 데이터를 모두 삭제하고, update의 경우 DB 테이블의 column을 변경하기 때문이다.

  → 운영서버에서의 사용은 절대적으로 지양한다. 더불어, 개발 서버에서도 잘 사용하지 않는다.

'Back-end > JPA 개념' 카테고리의 다른 글

6. Primary key(기본 키) Mapping  (0) 2022.03.29
5. Field(칼럼) Mapping  (0) 2022.03.28
3. JPA의 내부구조와 동작  (0) 2022.03.24
2. JPA의 기본 구조와 기능  (0) 2022.03.23
1. JPA의 등장  (0) 2022.03.22

댓글