[JPA] 스키마 생성, 객체 - 테이블 매핑

Woong·2022년 6월 16일
0

Java

목록 보기
12/21

데이터베이스 스키마 자동 생성

  • 앱 생성시 DB 테이블을 생성해주는 기능도 제공함

    • (개발 단계 등에서 유용)
  • 데이터베이스 방언에 맞춘 DDL 을 생성

    • (운영서버에서 사용하지 말고 개발 환경에서 사용 후 다듬기)
  • persistence.xml 파일에서 자동 생성 옵션을 주면 생성됨

    • create 주면 생성되는 식
    • create : 생성
      • (※ drop 하고 create 함)
    • create-drop : create 하고 앱 종료시 drop 해버림
      • -> 테스트케이스 등으로 쓸 때
      • ※ create, create-drop 옵션은 절대 운영환경에서 사용하면 안됨
    • update : 변경 부분만 반영
      • (운영 환경 사용 금지)
    • validate : 엔티티와 테이블이 정상 매핑되었는지 확인
    • none : 사용 안함
      • (주석 처리한 것과 동일)
  • 개발 초기는 create, update,

  • 테스트서버는 update, validate,

  • 스테이징, 운영 서버는 validate 또는 none 사용

  • @Column 을 통해 컬렴명(name), unique = true, length = 10 와 같이 컬럼 옵션 줄 수 있음

필드와 컬럼 매핑

  • 객체에서 Enum 타입을 쓰고 싶으면 @Enumerated 사용 (DB에는 보통 enum 이 없음)
    • -> varchar 로 매핑됨
    • 날짜 타입은 @Temporal(TemporalType.TIMESTAMP)

DATE, TIME, TIMESTAMP

  • 날짜, 시간, 날짜 + 시간 이렇게 구분해서 사용

Lob

  • varchar 를 넘어가는 데이터인 경우 @Lob 사용

Transient

  • DB 연결 없이 메모리상에서만 사용하고 싶은 필드일 경우 @Transient 사용

insertable, updatable

  • insertable 또는 updatable = false
    • -> 컬럼을 수정했을 때 DB에 반영할 것인지 여부 (기본은 TRUE)

제약조건

  • nullable = false 하면 not null 제약조건
  • unique = true 하면 Unique Key 제약 조건 (복합 컬럼은 안됨)
    • 하지만 제약조건 이름이 알아보기 힘들어서 (자동생성)
      • 보통 class 에 uniqueConstraints 로 이름까지 해서 제약조건을 검

enum

  • enum 에는 ORDINAL(순서 값)을 쓰면 안됨.

    • 그냥 쓰다가 enum 에 값이 추가되면 값이 섞여버리는 문제가 발생할 수 있음 (앞에다가 추가해버린다던가).
    • -> 복구 굉장히 난감함
    • -> EnumType.String 사용시 문자열로 저장되므로 안전하게 문자열로 저장.
  • LocalDate, LocalDateTime 사용시 @Temporal 생략 가능

기본 키 매핑

  • @Id : 직접 할당

  • @GenaratedValue : 자동할당

    • @GeneratedValue 사용하는 경우 new 해놓고 저장하면 id 값이 자동으로 할당 (AUTO_INCREMENT)
  • 자연키 : 비즈니스적으로 의미있는 키 (전화번호, 주민번호 등)

    • 비즈니스와는 전혀 상관 없는 내용을 키로 사용 권장

reference

0개의 댓글