본문 바로가기

STUDY/JPA

[자바 ORM 표준 JPA 프로그래밍 - 기본편] 엔티티 매핑

인프런 - 자바 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 형 + 대체키 + 키 생성전략 사용