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 |
댓글