@Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라고 합니다.
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수입니다.
name 속성은 JPA에서 사용할 엔티티 이름을 지정합니다.
기본값으로는 클래스 이름을 그대로 사용합니다.
주의
- 기본 생성자 필수
- 파라미터가 없는 public or protected 생성자
- Why? JPA를 구현해서 쓰는 라이브러리들이 다양한 기술을 사용해서 객체를 프록시할 때 필요하기 때문임
- final 클래스, enum, interface, inner 클래스 사용 X
- 저장할 필드에 final 사용 X
@Table은 엔티티와 매핑할 테이블을 지정합니다.
name 속성 : 매핑할 테이블 이름
catalog : 데이터베이스 catalog 매핑
schema : 데이터베이스 schema 매핑
uniqueConstraints(DDL) : DDL 생성 시에 유니크 제약 조건 생성
hibernate.hbm2ddl.auto
옵션 | 설명 |
---|---|
create | 기존테이블 삭제 후 다시 생성 (DROP + CREATE) |
create-drop | create와 같으나 종료시점에 테이블 DROP |
update | 변경분만 반영(운영DB에는 사용하면 안됨) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 사용하지 않음 |
DDL을 애플리케이션 실행 시점에 자동 생성합니다.
테이블 중심에서 객체 중심 개발이 가능합니다.
데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성합니다.
이렇게 생성된 DDL은 개발 장비에서만 사용해야합니다.
생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용합니다.
주의
- 운영 장비에는 절대 create, create-drop, update 사용 X
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영 서버는 validate 또는 none
hibernate.hbm2ddl.auto
어노테이션 | 설명 |
---|---|
@Column | 컬럼 매핑 |
@Temporal | 날짜 타입 매핑 |
@Enumerated | enum 타입 매핑 |
@Lob | BLOB, CLOB 매핑 |
@Transient | 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) |
@Enumerated : 자바 enum 타입을 매핑할 때 사용합니다.
@Temporal : 날짜 타입을 매핑할 때 사용합니다.
@Lob : 데이터베이스 BLOB, CLOB 타입과 매핑합니다.
@Transient
기본 키 제약 조건 : null 아님, 유일, 변하면 안됩니다.
미래까지 이 조건을 만족하는 자연키는 찾기 어렵습니다.
대리키(대체키)를 사용합시다.
예를 들어 주민등록번호도 기본 키로 적절하지 않습니다.
권장하는 방식은 Long형 + 대체키 + 키 생성전략 사용
[Reference]