Spring/JPA

[Spring/JPA] JPA(Hibernate 구현체) DDL 전략

오잎 클로버 2022. 6. 17. 15:33
728x90

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※

구현체의 ddl auto 속성을 사용하여 JPA의 데이터베이스 별로 DDL를 생성하는 데, 이는 데이터베이스 방언에 따라 변한다

Hibernate ddl auto 속성은 다음과 같다.

Hibernate DDL auto 속성

  • create: 기존 테이블을 삭제하고 새로 생성한다. Drop → Create
  • create-drop: create 속성에 추가로 애플리케이션을 종료할 때 Drop(DDL 제거)한다.
  • update: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경사항만 수정한다. (ALTER)
  • validate: 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있다면 경고를 남기고 애플리케이션을 실행하지 않는다.
  • none: 자동 생성 기능을 사용하지 않는다. 유효하지않는 옵션값을 사용하면 된다. (none은 유효하지않는 옵션값이다.)

추천 전략

  • 초기화 상태로 자동화된 테스트를 진행하는 개발 환경과 CI서버: create & create-drop
  • 테스트 서버는 update & validate
  • 스테이징과 운영 서버는 validate 혹은 none

DDL 생성 기능

@Column

  • nullable: default false, true일 경우 DDL에 (mysql 기준) NOT NULL 옵션이 들어가게 된다.
  • length: default 255, 문자, 문자열인 경우 길이를 정할 때 사용되는 옵션이 들어가게 된다.
  • name: default 변수명, 칼럼명을 정한다.

@Table

@Table의 유니크 제약조건을 걸 수 있다.

기존 @Table(name = "") 옵션을 사용하여 매핑명을 정할 수 있지만 이는 제외두고 유니크 제약조건을 걸 수 있다.

(mysql 기준, UNIQUE)

@Table(uniqueConstraints = {

    @UniqueConstraints(name = "NAME_UNIQUE", columnName = {"NAME"})

}

@Id

키 생성 전략 전략을 사용하려면 반드시 Hibernate의 new_generator_mappings를 반드시 true 속성을 추가해야한다.

(※기존 Hibernate 시스템을 유지보수하는 것이 아니라면 반드시 true로 설정하자)

(※참고로 이 옵션을 true로 설정하면 키 생성 성능을 최적화하는 allocationSize 속성을 사용하는 방식이 달라진다)

 

@Id 어노테이션으로 키를 매핑할 수 있는 타입이 따로 정해져있는 데 이는 다음과 같다.

  • 자바 기본형 (Primary)
  • 자바 래퍼형 (Wrapper)
  • String
  • java.util.Date
  • java.sql.Date
  • BigDecimal
  • BigInteger

위 클래스를 상속한 몇몇의 클래스들 역시 키로 매핑할 수 있다.

 

 

다음 포스트는 @Id, 기본키 할당 전략이다. (영속성 관리는 따로 추후 올릴 예정이다.)

이상입니다.

JPA 130/735 페이지