0. DB 스키마 자동 생성
- APP 실행 시 DDL 이 자동 생성된다.
- hibernate.hbm2ddl.auto 를 이용해 속성을 설정할 수 있다
- create
: 기존 테이블 삭제 후 생성
- create-drop
: create 와 같으나 종료 시점시 table drop
- update
: 변경분만 반영 (운영DB 에서는 사용 금지)
- validate
: 테이블과 엔티티가 정상 매핑되었는지만 확인
- none
: 사용하지 않음
1. 객체-엔티티 매핑
@Entity
- JPA 가 관리하는 엔티티로 클래스와 매핑한다.
속성
- name
: 엔티티 이름을 지정한다 (미사용시 클래스 이름을 그대로 사용한다)
주의점
- 기본 생성자가 필수적이다
: 파라미터가 없는 생성자
- final, enum, interface, inner 클래스 사용 X
@Table
- name
: 매핑할 테이블 이름
- catalog
: DB catalog 매핑
- schema
: DB schema 매핑
- uniqueConstraints(DDL)
: DDL 생성 시 유니크 제약 조건 생성
2. 필드-컬럼 매핑
- @Column : 컬럼 매핑
- name
- insterable/updatable
- unllable
- unique
- columnDefinition
: DB 컬럼 정보를 직접 줄 수 있다.
- length
- precision/scale
: BigDecimal 타입에서 사용
: precision
-> 소수점을 포함한 전체 자릿수
: scale
-> 소수 자릿수
- @Temporal : 날짜 타입 매핑
- value
: TemporalType.DATE
-> 날짜, DB date 타입과 매핑
-> e.g) 2013-10-11
: TemporalType.TIME
-> 시간, DB time 타입과 매핑
-> e.g) 11:11:11
: TemporalType.TIMESTAMP
-> 시간,날짜 DB timestamp 타입과 매핑
-> e.g) 2013-10-11 11:11:11
- @Enumerated : enum 타입 매핑
- value
: EnumType.ORDINAL
-> enum 순서를 DB 에 저장 (기본값)
: EnumType.STRING
-> enum 이름을 데이터베이스에 저장
- @Lob : BLOB, CLOB 매핑
- @Transient : 특정 필드를 컬럼에 매핑하지 않음 (매핑 무시)
: 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때만 사용한다
3. 기본 키 매핑
- @Id
- @GeneratedValue
- IDENTITY
: 기본키 생성을 DB에 위임한다.
: MySQL 의 auto_increment 와 같음
: INSERT 된 이후에야 ID 값을 알 수 있다.
- SEQUENCE
: 유일한 값을 순서대로 생성하는 방식
: Oracle 과 같은 DB 에서 많이 사용
: persist
하는 시점에 DB 에 접근해서 값을 받아와서 영속성 컨텍스트에 쌓아놨다가 commit
하는 방식이다.
: persist
할때마다 네트워크를 오가야하기 때문에 성능상 이슈가 있음
: 하지만, allocateSize 를 통해 해결 가능
- TABLE
: 키 생성 전용 테이블을 만들어 DB 시퀀스를 흉내내는 전략
: 성능 안좋음!
- AUTO
: 방언에 따라 자동 지정, (기본 값)
권장하는 식별자
- 기본키는 null 이 아니며 유일하고 변하지 않는 존재여야 한다.
- Long + 대체키 + 키 생성전략을 사용하자
- 대체키 : GeneratedValue 와 같이 비즈니스와 전혀 상관없는 값
출처