엔티티 매핑(Entity Mapping)
JPA의 가장 중요하고 기본적인 작업은 테이블과 엔티티를 매핑하는 것이다.
JPA는 이를 위해서 다양한 매핑 어노테이션을 지원한다.
- 객체와 테이블 매핑 : @Entity, @Table
- 기본키 매핑 : @Id
- 필드와 컬럼 매핑 : @Column, @Enumerated, @Temporal, @Lob
- 연관관계 매핑 : @ManyToOne, @JoinColumn
객체와 테이블 매핑
1. @Entity
테이블과 매핑할 클래스에 필수로 붙여야한다.
기본 생성자는 필수이다.
final 클래스, enum, interface, inner 클래스에서는 사용할 수 없다.
저장할 필드에 final을 사용하면 안된다.
2.@Table
엔티티와 매핑할 테이블을 지정한다. 옵션으로 name을 주지 않게 되면 엔티티 이름을 테이블 이름으로 사용한다.
필드와 컬럼 매핑
1. @Enumerated(EnumType.STRING)
enum을 사용해서 타입구분
2. @Temporal(temporalType.TIMESTAMP)
자바의 Date를 매핑할 경우 사용
3. @Lob
CLOB, BLOB 타입을 매핑할 경우
필드와 컬럼 매핑 DDL 옵션
1. @Column
테이블 컬럼과 매핑하는 어노테이션인데 옵션 중에는 DDL로 스키마를 생성할 때 사용되는 옵션이 있다.
스키마를 생성하는 기능은 아래에 있다.
@Column(name = "NAME", nullable = false, length = 10)
위와 같이 컬럼에 nullable, length와 같은 옵션을 주게 되면 테이블 생성시 not null, 문자열 길이와 같은 제약조건이 추가된다.
엔티티를 이용한 테이블 생성
<property name="hibernate.hbm2ddl.auto" value="create" />
persistence.xml에 위의 코드를 추가한 다음 어플리케이션을 실행하면 아래와 같은 DDL이 출력된다.
Hibernate: drop table MEMBER if exists Hibernate: create table MEMBER ( ID varchar(255) not null, age integer, createdDate timestamp, description clob, lastModifiedDate timestamp, roleType varchar(255), NAME varchar(10) not null, primary key (ID) ) Hibernate: alter table MEMBER add constraint NAME_AGE_UNIQUE unique (NAME, age)
이 기능을 사용하면 어플리케이션 실행 시점에 테이블을 새로 생성하는데 매우 유용하다. 추후 포스팅을 할 예정인데. insert쿼리를 만들어서 어플리케이션 실행시점에 데이터를 삽입할 수도 있기 때문에 개발하기 매우 편하다.
만약 변경된 엔티티에 대해서만 DDL 수정을 하고 싶을 경우에 xml옵션으로 create 대신 update를 주면 된다.
이 옵션은 편리하지만 조심히 사용해야한다. 운영환경에서 create를 사용했다고 생각하면 끔찍한 일이 발생할 수도 있기 때문이다. 절대 운영환경에서는 사용하면 안된다.
'Programming > 과거포스팅' 카테고리의 다른 글
[JPA] - 연관관계 매핑1 (0) | 2016.12.27 |
---|---|
[JPA] - 기본 키(Primary Key) 매핑 (0) | 2016.12.19 |
[JPA] - 영속성 컨텍스트(persistence context)의 특징 (0) | 2016.12.18 |
[JPA] - 영속성 컨텍스트(persistence context) 와 엔티티의 생명주기 (0) | 2016.12.16 |
[JPA] 엔티티 매니저 팩토리와 엔티티 매니저(EntityManagerFactory and EntityManager) (0) | 2016.12.16 |