[자바 표준 ORM JPA]4장 엔티티 매핑

@Entity

  • 속성
    • name: 엔티티 이름을 지정한다. (기본으로 클래스 이름을 사용)
  • 기본생성자는 필수다

@Table

  • 속성
    • name: 매핑할 테이블 이름(엔티티 이름을 기본으로 사용)
    • catalog: catalog 기능이 있는 데이터베이스에서 catalog를 매칭한다.
    • schema: schema 기능이 있는 데이터베이스에서 schema를 매핑한다.
    • uniqueConstraints(DDL): DDL 생성시에 유니크 제약조건을 만든다.

hibernate, hbm2ddl.auto 속성

  • create: 기존 테이블을 삭제하고 새로 생성한다. DROP + CREATE
  • create-drop: create 속성에 추가로 애플리케이션을 종료할 떄 생성한 DDL을 제거한다. DROP + CREATE + DROP
  • update: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정한다.
  • validate: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. 이설정은 DDL을 수정하지 않는다.
  • none: 자동 생성 기능을 사용하지 않으려면 hibernate.hbm2ddl.auto 속성 자체를 삭제하거나 유효하지 않은 옵션 값을 주면 된다.
  • 개발 환경에 따른 추천전략
    • 개발 초기 단계는 create 또는 update
    • 초기화 상태로 자동화된 테스트를 진행하는 개발자 환경과 CI 서버는 create 또는 create-drop
    • 테스트 서버는 update 또는 validate
    • 스테이징과 운영 서버는 validate 또는 none

DDL 생성 기능

@Colume(name = “NAME”, nullable = false, length = 10) not null 제약조건과 varchar(10)이 추가됨

기본 키 매핑

JPA가 제공하는 데이터베이스 기본 키 생성 전략

  • 직접 할당: 기본 키를 애플리케이션에서 직접 할당한다.
  • 자동 생성: 대리 키 사용 방식
    • IDENTITY: 기본키 생성을 데이터베이스에 위임한다
    • SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다
    • TABLE: 키 생성 테이블을 사용한다

@GeneratedValue(strategy = GenerationType.SEQUENCE) @SequenceGenerator로 설정이 가능하다.
속성

  • name: 식별자 생성기 이름(필수)
  • sequenceName: 데이터베이스에 등록되어있는 시퀀스 이름
  • initalValue: DDL 생성시에만 사용됨. 시퀀스 DDL을 생성할 때 청므 시작하는 수를 지정한다.
  • allocationSize: 시퀀스 한번 호출에 증가하는 수(성능 최적화에 사용됨)
  • catalog, schema: 데이터베이스 catalog,schema이름

권장하는 식별자 선택 전략

데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다.

  1. null 값을 허용하지 않는다.
  2. 유일해야한다.
  3. 변해선 안된다. 테이블의 기본키를 선택하는 전략은 크게 2가지가 있다.
    • 자연키(natural key)
      • 비즈니스에 의미가 있는 키
      • 예: 주민등록번호, 이메일, 전화번호
    • 대리키(surrogate key)
      • 비즈니스와 관련 없는 임의로 만들어진 키, 대체키로도 불린다.
      • 예 오라클 시퀀스, auto_increment, 키생성 테이블 사용
      • 자연키보다는 대리키를 권장한다.
        비즈니스 환경은 언젠가 변한다
        JPA는 모든 엔티티에 일관된 방식으로 대리키 사용을 권장한다.

필드와 컬럼 매핑: 레퍼런스

@Column

  • name: 필드와 매핑할 테이블의 컬럼 이름(객체의 필드 이름)
  • nullable: null 값의 허용 여부를 설정한다
  • unique: 한 컬럼에 간단한 유니크 제약조건을 걸 떄 사용한다.
  • length: 문자 길이 제약조건, String 타입에만 사용한다.
  • columnDefinition: 데이터베이스 컬럼 정보를 직접 줄 수 있다.
  • @Enumerated

    자바의 enum 타이을 매핑할 떄 사용한다.

  • EnumType.ORDINAL: enum 순서를 데이터베이스에 저장
  • EnumType.STRING: enum 이름을 데이터베이스에 저장

@Temporal

  • TemporalType.DATE: 날짜, 데이터베이스 data 타입과 매핑(예: 2022-10-11)
  • TemporalType.TIME: 시간, 데이터베이스 time타입과 매핑(예: 11:11:11)
  • TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑(예: 2022-10-11 11:11:11)

Categories:

Updated:

Leave a comment