3. 매핑

신명철·2022년 2월 11일
0

JPA

목록 보기
3/14

0. DB 스키마 자동 생성

  • APP 실행 시 DDL 이 자동 생성된다.
  • hibernate.hbm2ddl.auto 를 이용해 속성을 설정할 수 있다
    • create
      : 기존 테이블 삭제 후 생성
    • create-drop
      : create 와 같으나 종료 시점시 table drop
    • update
      : 변경분만 반영 (운영DB 에서는 사용 금지)
    • validate
      : 테이블과 엔티티가 정상 매핑되었는지만 확인
    • none
      : 사용하지 않음

1. 객체-엔티티 매핑

@Entity

  • JPA 가 관리하는 엔티티로 클래스와 매핑한다.

속성

  • name
    : 엔티티 이름을 지정한다 (미사용시 클래스 이름을 그대로 사용한다)

주의점

  1. 기본 생성자가 필수적이다
    : 파라미터가 없는 생성자
  2. final, enum, interface, inner 클래스 사용 X

@Table

  • name
    : 매핑할 테이블 이름
  • catalog
    : DB catalog 매핑
  • schema
    : DB schema 매핑
  • uniqueConstraints(DDL)
    : DDL 생성 시 유니크 제약 조건 생성

2. 필드-컬럼 매핑

  • @Column : 컬럼 매핑
    • name
    • insterable/updatable
    • unllable
    • unique
    • columnDefinition
      : DB 컬럼 정보를 직접 줄 수 있다.
    • length
    • precision/scale
      : BigDecimal 타입에서 사용
      : precision -> 소수점을 포함한 전체 자릿수
      : scale -> 소수 자릿수
  • @Temporal : 날짜 타입 매핑
    • value
      : TemporalType.DATE
      -> 날짜, DB date 타입과 매핑
      -> e.g) 2013-10-11
      : TemporalType.TIME
      -> 시간, DB time 타입과 매핑
      -> e.g) 11:11:11
      : TemporalType.TIMESTAMP
      -> 시간,날짜 DB timestamp 타입과 매핑
      -> e.g) 2013-10-11 11:11:11
  • @Enumerated : enum 타입 매핑
    • value
      : EnumType.ORDINAL
      -> enum 순서를 DB 에 저장 (기본값)
      : EnumType.STRING
      -> enum 이름을 데이터베이스에 저장
  • @Lob : BLOB, CLOB 매핑
  • @Transient : 특정 필드를 컬럼에 매핑하지 않음 (매핑 무시)
    : 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을 때만 사용한다

3. 기본 키 매핑

  • @Id
  • @GeneratedValue
    • IDENTITY
      : 기본키 생성을 DB에 위임한다.
      : MySQL 의 auto_increment 와 같음
      : INSERT 된 이후에야 ID 값을 알 수 있다.
    • SEQUENCE
      : 유일한 값을 순서대로 생성하는 방식
      : Oracle 과 같은 DB 에서 많이 사용
      : persist 하는 시점에 DB 에 접근해서 값을 받아와서 영속성 컨텍스트에 쌓아놨다가 commit 하는 방식이다.
      : persist 할때마다 네트워크를 오가야하기 때문에 성능상 이슈가 있음
      : 하지만, allocateSize 를 통해 해결 가능
    • TABLE
      : 키 생성 전용 테이블을 만들어 DB 시퀀스를 흉내내는 전략
      : 성능 안좋음!
    • AUTO
      : 방언에 따라 자동 지정, (기본 값)

권장하는 식별자

  • 기본키는 null 이 아니며 유일하고 변하지 않는 존재여야 한다.
  • Long + 대체키 + 키 생성전략을 사용하자
    • 대체키 : GeneratedValue 와 같이 비즈니스와 전혀 상관없는 값

출처

profile
내 머릿속 지우개

0개의 댓글