본문 바로가기
  • 주니어 개발자의
    RESTful 성장기
Web/JPA

4-1. Entity 매핑 (1)

by 돌건 2021. 6. 9.

Entity와 테이블을 매핑하기 위해서 사용되는 어노테이션들에 대해서 알아보자.

 

1. @Entity

JPA를 사용해서 테이블과 매핑하고자 하는 클래스에는 @Entity 어노테이션이 필수로 붙어야 한다.

속성 기능 기본값
name JPA에서 사용할 Entity 이름을 지정한다. 보통 기본값인 클래스 이름을 사용한다. 만약 다른 패키지에 동일한 이름의 Entity 클래스가 있다면 이름을 지정해 충돌을 방지한다. 클래스 이름을 그대로 사용.
  • JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문에 기본 생성자는 필수적으로 가져야 한다. (전달인자 없는 public 또는 protected 생성자)
  • final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
  • 저장할 필드에 final사용하면 안 된다.

2.@Table

Entity와 매핑할 테이블을 지정한다. 생략하는 경우 매핑한 Entity 이름을 테이블 이름으로 사용한다.

속성 기능 기본값
name 매핑할 테이블명 엔티티 이름을 그대로 사용.
catalog catalog 기능이 있는 DB에서 catalog를 매핑  
schema schema 기능이 있는 DB에서 schema를 매핑  
uniqueConstraints
(DDL)
DDL 생성 시에 유니크 제약조건을 만든다. 2개 이상의 복합 유니크 제약조건도 만들 수 있다. 이 기능은 스키마 자동 생성 기능을 사용해 DDL을 만들 때만 사용된다.  

3. DB schema 자동 생성

스키마 자동 생성 기능을 사용하기 위해서는 우선 persistence.xml에 다음 속성을 추가해야 한다.

<property name="hibernate.hbm2ddl.auto" value="create" />

이 속성을 추가하면 애플리케이션 실행 시점에 DB 테이블을 자동으로 생성한다. 

 

hibernate.hbm2ddl.auto의 속성은 다음 표와 같다.

속성 설명
create 기존 테이블을 삭제하고 새로 생성한다. DROP + CREATE
create-drop create 속성에 추가로 애플리케이션을 종료할 때 생성한 DDL을 제거한다.
DROP + CREATE + DROP
update DB 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정한다.
validate DB 테이블과 엔티티 매핑정보를 비교해 차이가 있다면 경고를 남기고 애플리케이션을 실행하지 않는다.
none 자동 생성 기능을 사요하지 않는다.

 

* 이름 매핑 전략 변경하기

단어와 단어를 구분할 때 자바의 경우 카멜 표기법을 사용하지만, DB는 스네이크 표기법을 주로 사용한다. 그렇기 때문에 @Column의 name 속성을 명시적으로 사용해 이름을 지어주어야 한다.

@Column(name="user_name")
String userName

<property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
이와 속성을 persistence.xml에 추가하면 테이블명이나 컬럼명이 생략되면 자바의 카멜 표기법을 테이블의 스네이크 표기법으로 매핑한다.

 

 

참고 문헌: 자바 ORM 표준 JPA 프로그래밍

'Web > JPA' 카테고리의 다른 글

4-3. Entity 매핑 (3)  (0) 2021.06.16
4-2. Entity 매핑 (2)  (0) 2021.06.11
3-3. Flush와 준영속  (0) 2021.06.07
3-2. 영속성 컨텍스트의 특징  (0) 2021.05.31
3-1. 영속성 컨텍스트와 Entity 생명주기  (0) 2021.05.26

댓글