3. 필드와 컬럼 매핑
데이터베이스 스키마 자동 생성하기
DDL 을 애플리케이션 실행 시점에 자동 생성
테이블 중심 -> 객체 중심
데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
이렇게 생성된 DDL 은 개발 장비에서만 사용
생성된 DDL 은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용
옵션 (hibernate.hbm2ddl.auto)
create : 기존테이블 삭제 후 다시 생성(DROP + CREATE)
create-drop : create 와 같으나 종료시점에 테이블 DROP
update : 변경분만 반영(운영DB 에는 사용하면 안됨)
validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
none : 사용하지 않음
데이터베이스 스키마 자동 생성하기 주의
운영 장비에는 절대 create, create-drop, update 사용하면 안된다.
개발 초기 단계는 create 또는 update
테스트 서버는 update 또는 validate
스테이징과 운영 서버는 validate 또는 none
기본 매핑 어노테이션
자바 코드가 아닌 철저하게 테이블 매핑과 관련되어 있다.
@Column : 자바 코드와 컬럼명이 동일하면 상관없지만, 아니라면 이름을 지정해줄 수 있다.
@Temporal
@Enumerated : 반드시
EnumType.STRING
으로 지정해주어야 한다.EnumType.ORDINAL
기본 값인데, 이 설정은 문자가 아닌 숫자로 DB 에 저장된다.이 경우 중간에 다른 옵션이 추가되는 경우 DB 에 저장된 값이 모두 꼬여버린다.
EnumType.STRING
은 문자가 저장된다.
@Lob
@Transient
@Column
가장 많이 사용됨
name : 필드와 매핑할 테이블의 컬럼 이름
length : 필드 길이 설정
insertable, updateable : 읽기 전용
nullable : null 허용 여부 결정, DDL 생성시 사용
unique : 유니크 제약 조건, DDL 생성시 사용
columnDefinition, length, percision, scale (DDL)
@Temporal
날짜 타입 매핑
@Enumerated
열거형 매핑
EnumType.ORDINAL : 순서를 저장(기본값)
EnumType.STRING : 열거형 이름을 그대로 저장, 가급적 이것을 사용
@Lob
컨텐츠 크기가 너무 클 때 사용
문자, 바이너리 중 선택 가능 (타입 지정)
CLOB, BLOB 매핑
CLOB : String, char[], java.sql.CLOB
BLOB : byte[], java.sql.BLOB
@Transient
이 필드는 매핑하지 않는다.
애플리케이션에서 DB 에 저장하지 않는 필드
식별자 매핑 어노테이션
@Id
@GeneratedValue
@Id @GeneratedValue
@Id(직접 매핑)
IDENTITY : 데이터베이스에 위임, MYSQL
SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE
@SequenceGenerator 필요
TABLE : 키 생성용 테이블 사용, 모든 DB 에서 사용
@TableGenerator 필요
AUTO : 방언에 따라 자동 지정, 기본값
권장하는 식별자 전략
기본 키 제약 조건 : null 아님, 유일, 변하면 안된다.
미래까지 이 조건을 만족하는 자연키를 찾기 어렵다. 대리키(대체키) 를 사용하자.
예를 들어 주민등록번호도 기본 키로 적절하지 않다.
권장 : Long + 대체키(아무런 비지니스랑 연관 없는 값, DB 시퀀스) + 키 생성전략 사용
Last updated