인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님)
엔티티 매핑
1. 객체와 테이블 매핑
- @Entity
- @Entity가 붙은 클래스는 JPA가 관리
- JPA를 사용해 테이블과 매핑할 클래스에 @Entity 어노테이션 추가
- 기본 생성자 필수
- final 클래스, enum, interface, inner 클래스 사용 X
- 저장할 필드에 final 사용 X
- @Table
- @Table은 엔티티와 매필항 테이블 지정
2. 데이터베이스 스키마 자동 생성
- 운영에선 사용하지 말고, 개발에서만 사용할 것!!
- DDL을 애플리케이션 실행 시점에 자동 생성
- 데이터베이스 방언을 활용해 데이터베이스에 맞는 적절한 DDL이 생성됨
속성
hibernate.hbm2ddl.auto
옵션 | 설명 |
create | 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) |
create-drop | create와 같으나 종료 시점에 테이블 DROP (주로 테스트케이스에 사용) |
update | 변경된 부분만 반영(운영 DB에 사용하면 안됨!!) |
validate | 엔티티와 테이블이 정상매핑되었는지만 확인 |
none | 사용하지 않음 |
3. 필드와 컬럼 매핑
@, 매핑 어노테이션
- @Enumerated(EnumType.STRING) : Enum 타입
- EnumType.String : enum 이름을 DB에 저장
- EnumType.ORDINAL : enum 순서를 DB에 저장 (default)
- @Temporal(TemporalType.TIMESTAMP, DATE, TIME) : 날짜 타입
- @Lob(Blob, Clob) : varchar를 넘어서는 큰 값
- @Transient : 매핑 무시 (DB와 관계없이 메모리상에서만 사용할 때)
@Column
- name
- insertable, updatable : DB에 등록, 변경 가능 여부
- nullable : default는 not null
- unique : 유니크 제약 조건
4. 기본 키 매핑
@, 매핑 어노테이션
- @Id
- @GeneratedValue
기본 키 매핑 방법
- 직접 할당
- @Id만 사용
- 자동 생성 (@Id + @GeneratedValue)
- AUTO : DB에 맞춰 자동 생성
- IDENTITY : auto_increment를 DB에 위임 (MySQL, PostgreSQL, SQL Server, DB2)
- Id값을 알 수 있는 시점은 커밋 시점
- 예외적으로 em.persist()를 호출하는 시점에 insert 쿼리가 발생
- SEQUENCE : 데이터베이스 sequence object 사용 (오라클, PostgreSQL, DB2, H2)
- @SequenceGenerator 필요
- Table : 키 생성용 테이블 사용 (모든 DB 가능, but 성능이 조금 떨어짐)
- @TableGenerator 필요
권장하는 식별자 전략
- 기본 키 제약 조건 : not null, 유일, 불변
- 대리키(대체키) 사용하기!
- 권장 : Long 형 + 대체키 + 키 생성전략 사용
'STUDY > JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 프록시와 연관관계 관리 (0) | 2023.12.10 |
---|---|
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 고급 매핑 (0) | 2023.12.10 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 다양한 연관관계 매핑 (1) | 2023.12.10 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 연관관계 매핑 기초 (0) | 2023.12.10 |
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 영속성 관리 (0) | 2023.12.10 |