[JPA] Entity Mapping

Jiwoo Kim·2020년 11월 17일
1

JPA 마스터하기

목록 보기
9/14
post-thumbnail

대표적인 Entity Mapping Annotation

  • 객체와 테이블 매핑: @Entity, @Table
  • 기본 키 매핑: @Id
  • 필드와 컬럼 매핑: @Column
  • 연관관계 매핑: @ManyToOne, @JoinColumn
  • 접근 방식: @Access

@Entity

테이블과 매핑할 클래스 필수 지정

  • 기본 생성자 필수
  • final, enum, interface, inner 클래스에는 사용 불가
  • 필드에 final 사용 불가
속성기능기본값
nameJPA에서 사용할 엔티티 이름클래스 이름

@Table

엔티티와 매핑할 테이블 지정

  • 생략 시 엔티티 이름을 테이블 이름으로 사용
속성기능기본값
name매핑할 테이블 이름엔티티 이름
catalogcatalog 기능이 있는 DB에 catalog 매핑
schemaschema 기능이 있는 DB에 schema 매핑
uniqueConstraints(DDL)DDL 생성 시 uniqueConstraints 생성

@Column

필드와 매핑할 컬럼 지정

  • 생략 시
    • 자바 기본 타입: @Column 생략 시 not null / @Column 사용하고 nullable은 생략 시 nullable
    • 객체 타입: 별도 nullable 생략 시 nullable
속성기능기본값
name매핑할 컬럼 이름필드 이름
nullable(DDL)null값 허용 여부true
unique(DDL)한 컬럼에 uniqueConstraints
columnDefinition(DDL)DB 컬럼 정보 직접 지정자바 타입 + 방언 정보를 사용해 적절히 생성
length(DDL)String 길이 제약 조건255
table매핑할 테이블 이름기본 엔티티 테이블

cf.) 이름 매핑 전략: 자바의 Camel 표기법을 DB의 언더스코어(_) 구분법으로 자동 매핑

<property name="hibernate.ejb.naming_strategy"
    value="org.hibernate.cfg.ImprovedNamingStrategy" />

@Enumerated

자바 enum 타입 매핑

속성기능기본값
value- EnumType.ORDINAL: 순서 (숫자)
- EnumType.String: 이름 (문자)
EnumType.ORDINAL

@Temporal

날짜(java.util.Date, java.util.Calendar) 타입 매핑

속성기능기본값
value- TemporalType.DATE
- TemporalType.TIME
- TemporalType.TIMESTAMP
필수 지정 필요

@Transient

매핑하지 않고 객체에 임시로 보관만 하는 필드


PK 매핑

persistence.xml

<property name="hibernate.id.new_generator_mappings" value="true" />

직접할당 (@Id)

em.persist()로 엔티티 저장 전 기본 키 직접 할당

  • 적용 가능 자바 타입
    • 자바 기본형
    • 자바 Wrapper형
    • String
    • java.util.Date / java.sql.Date
    • java.math.BigDecimal
    • java.math.BigInteger

자동생성 (@Id + @GeneratedValue)

  1. IDENTITY 전략
  • DB에 PK 생성 위임
  • @GeneratedValue(strategy = GenerationType.IDENTITY)
  • 생성된 PK 값을 얻어오기 위해 쓰기 지연 없이 바로 Insert 후 DB 추가 조회
  • MySQL, PostgreSQL, SQL Server, DB2
  1. SEQUENCE 전략 (p.135)
  • DB 시퀀스: 유일한 값을 순서대로 저장하는 DB object
  • Oracle, PostgreSQL, DB2, H2
    (일단 넘어감! 나중에 돌아와서 보기)
  1. TABLE 전략
  • 키 생성 전용 테이블을 만들어 시퀀스와 유사한 효과
    (이것도 일단 넘어감! 나중에 꼭 돌아오기..)
  1. AUTO 전략
  • 위 세 전략 중 DB 방언에 따라 자동으로 선택

@Access

JPA가 엔티티에 접근하는 방식

접근 방식기능
AccessType.PROPERTYGetter로 접근
AccessType.FIELD필드에 직접 접근 (private 무관)

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다. (2020.09.13)

0개의 댓글