- 객체와 테이블 맵핑
- 데이터베이스 스키마 자동생성
1. 객체와 테이블 맵핑
- @Entity
- @Entity가 붙은 클래스는 JPA가 관리
- JPA를 사용해서 테이블과 맵핑할 클래스는 @Entity가 필수
- 속성 : name
- JPA에서 사용할 엔티티 이름을 지정
- 기본값 = 클래스 이름
- 가급적이면 기본값 사용
- 주의
1. 기본 생성자 필수(일단은 스펙상 그렇다고 알아두기)
2. final 클래스, enum, interface, inner 클래스 사용X
3. 저장할 필드에 final 사용X
- @Table
- @Table은 엔티티와 맵핑할 테이블 지정
- 속성
1. name
- 맵핑할 테이블 이름
- 기본값 = 엔티티 이름을 사용
2. catalog
- 데이터베이스 catalog 맵핑
3. schema
- 데이터베이스 schema 맵핑
4. uniqueConstraints(DDL)
- DDL 생성 시에 유니크 제약 조건 생성
2. 데이터베이스 스키마 자동생성
- 정의
- DDL(Data Definition Language, 데이터 정의어)을 애플리케이션 실행 시점에 자동 생성
- 테이블 중심 -> 객체 중심
- 각 데이터베이스의 특성에 맞는 적절한 DDL 생성
- 속성 -
<property name="hibernate.hbm2ddl.auto" value="create"/>
이용
(1) create
- 기존테이블 삭제 후 다시 생성(DROP + CREATE)
(2) create-drop
- create와 같으나 종료시점에 테이블DROP
(3) update
- 변경된 것만 반영
- 추가하는것만 되고 지우는거는 안됨 -> 테이블 컬럼 날라가면 큰일나기 때문
(4) validate
- 엔티티와 테이블이 정상 맵핑되었는지만 확인
(5) none
- 사용안하기
- 주석과 같음
- 사실 'none'이 아닌 아무거나('asdf')를 적는것과 같음
- DDL 생성 기능
- 제약 조건 추가
- @Column(unique=true, nullable=false, length=10)
@Table(name="MBR")
와 같은 것은 런타임에 영향을 주는데 반해, DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않음
- 주의 사항
- 운영 장비에서는 create, create-drop, update 속성을 사용하면 안됨!!!
- 그냥 개발 서버랑 테스트 서버에서 validate정도만 쓰고, 안쓰는게 나음
이 글은 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 정리한 내용입니다.