자바 ORM 표준 JPA 프로그래밍 기본편 - 4. 엔티티 매핑
Updated:
김영한님의 인프런 강의 - 자바 ORM 표준 JPA 프로그래밍 - 기본편
위 강의를 정리한 내용입니다.
I. 객체와 테이블 매핑
@Entity
- @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.
- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
- 주의
- 기본 생성자 필수(public 또는 protected)
- final 클래스, enum, interface, inner 클래스 사용 X
- 저장할 필드에 final 사용 X
@Table
- 엔티티와 매핑할 테이블 지정
II. 데이터베이스 스키마 자동 생성
persistence.xml
에<property name="hibernate.hbm2ddl.auto" value="create" />
추가- 옵션
- create : 기존테이블 삭제 후 다시 생성
- create-drop : create와 같으나 종료 시점에 drop
- update : 변경 부분만 반영(추가만)
- validate : 엔티티와 테이블이 정상 매핑되었는지 확인(에러 반환)
- none : 사용하지 않음(주석처리와 같음)
- 주의
- 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다.
- 개발 초기 : create, update
- 테스트 서버 : update, validate
- 스테이징, 운영 서버 : validate, none
- 가급적이면 쓰지말자
DDL 생성 기능
- 제약조건 추가 : 회원 이름은 필수, 10자 초과 X
-
@Column(nullable = false, length = 10)
-
- DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향X
III. 필드와 컬럼 매핑
@Column (기본값)
- 속성
nullable
: null 값의 허용 여부. false라면 not null조건unique
: 컬럼에 유니크 제약조건. 하지만 이상한 문자로 채워짐columnDefinition
: 데이터베이스 컬럼 정보를 직접 줄 수 있다. (데이터베이스 방언)
@Enumerated
- Enum 타입을 매핑할 때 사용
- 속성
EnumType
: 절대로ORDINAL
을 사용하지 말자EnumType.ORDINAL
: 해당enum
의 index로 저장EnumType.STRING
: 해당enum
을 문자로 저장
@Temporal
- 날짜 타입을 매핑할 때 사용
- 하이버네이트 최신 버전에서는
LocalDate
,LocalDateTime
타입으로 대체하여 쓰이지 않음
@Lob
- 속성이 없다.
- 매핑하는 필드가 문자면
CLOB
, 나머지는 `BLOB으로 매핑
@Transient
- 매핑하지 않고자 할 때
- 주로 메모리상에서 테스트 할 때
III. 기본 키 매핑
기본 키 매핑 방법
- 직접 할당 :
@Id
만 사용 - 자동 생성 :
@GeneratedValue
추가 strategy
속성GenerationType.IDENTITY
: DB에 위임- DB단계까지 가야 기본키가 생성되기 때문에, 영속성 컨텍스트내에서는 PK가 없는 오류가 생긴다. 따라서 예외적으로
IDENTITY
전략에서는persist
할 때 DB에 일단 적용한다.
- DB단계까지 가야 기본키가 생성되기 때문에, 영속성 컨텍스트내에서는 PK가 없는 오류가 생긴다. 따라서 예외적으로
GenerationType.SEQUENCE
: DB에 시퀀스를 생성하고 대입allocationSize
: 시퀀스를 한 번 호출할 때 여러개를 한번에 가져와서 call 비용을 절약함
GenerationType.TABLE
: 키 생성 전용 테이블을 만들어 데이터베이스 시퀀스를 흉내냄
권장하는 식별자 전략
- 기본 키 제약 조건 : not null, 유일, 불변
- 미래까지 이 조건을 만족하는 자연키를 찾기 어렵다. 대체키를 이용
- 권장 : Long형 + 대체키 + 키 생성전략 사용
Leave a comment