✨엔티티 매핑 소개
- 객체와 테이블 매핑 : @Entity, @Table
- 필드와 컬럼 매핑 : @Column
- 기본 키 매핑 : @Id
- 연관관계 매핑 : @ManyToOne, @JoinColumn
📌 1. 개체와 테이블 매핑
1-1. @Entity
- @Entity가 붙은 클래스는 JPA가 관리한다.
- JPA를 사용하여 테이블과 매핑할 클래스는 @Entity 필수
- 기본 생성자 필수
✔️ 주의
- enum, interface 클래스 엔티티 사용 불가
- 저장할 필드(전역변수)에 final 사용 불가
- 속성 : name
- JPA에서 사용할 엔티티 이름을 지정한다.
- 기본값을 쓸것을 권장
1-2. @Table
- 엔티티와 매핑할 테이블 지정
- 속성
- name : 매핑할 테이블 이름
- catalog : 데이터베이스 catalog 매핑
- schema : 데이터베이스 schema 매핑
- DDL(uniqueConstraints) : DDL 생성 시에 유니크 제약 조건 생성
📌 2. 데이터베이스 자동 생성
- DDL을 애플리케이션 실행 시점에 테이블 자동 생성
- 테이블 중심 -> 객체 중심
- 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적정한 DDL 생성
✔️persistence.xml을 만들어 sql 방언을 위한 코드를 넣어줌(Oracle 데이터베이스 사용중)
📌 3. hibernate.hbm2ddl.auto 옵션
- 데이터베이스 스키마 자동생성 옵션
- create : 기존 테이블 삭제 후 다시 생성(drop + create)
- create-drop : create와 같으나 종료시점에 테이블 drop
- update : 변경분만 반영
- validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
- none : 사용하지 않음
📌 4. 제약조건 추가
ex)회원이름 필수, 길이는 10자
- @Column(nullable = false, length = 10)
- @Temporal : 날짜 타입 매핑
- @Enumerated : enum 타입 매핑
- @Lob : BLOB, CLOB 매핑
- @Transient : 특정 필드를 컬럼에 매핑하지 않음
📌 5. @Column
- name : 필드와 매핑할 테이블의 컬럼 이름
- null : null값의 허용 여부 설정
- unique : 한 컬럼에 대해 unique하게 제약조건을 걸때 사용
- length : 문자 길이 제약조건, String 타입에만 사용
@Column(unique = true, length = 10)
private String name;
📌 6. 기본 키 매핑
- @Id <- 직접 할당
- @GeneratedValue
6-1. @GeneratedValue
- 자동생성 -> 전략
-> identity : 데이터베이스에 위임
-> sequence : 데이터베이스 시퀀스 오브젝트 사용
@SequenceGenerator 필요
-> table : 키 생성용 테이블 사용, 모든 DB에서 사용
@TableGenerator
-> auto : 방언에 따라 자동 지정, 기본값
6-1-1. @SequenceGenerator
-> name : 식별자 이름
-> sequenceName : 데이터베이스 등록되어 있는 시퀀스 이름
(hibernate_sequence)
-> initialValue : 시퀀스 DDL을 생성할때 처음 시작하는 수 지정
-> allocationSize : 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정(이 값을 1로 설정)
-> catalog, schema : 데이터베이스 catalog, schema 이름 설정