티스토리 뷰

JPA

[JPA] 필드와 컬럼 매핑

tonirr 2020. 5. 27. 03:05
  • 데이터베이스 스키마 자동 생성하기

    • DDL을 애플리케이션 실행 시점에 자동 생성

    • 테이블 중심 -> 객체 중심

    • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

    • 이렇게 생성된 DDL은 개발 장비에서만 사용

    • 생성된 DDL은 운영서버에서는 사용하지 않거나 적절히 다듬은 후 사용

** 스키마란?

  • 스키마는 데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
  • 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건등에 관해 전반적으로 정의한다.
  • 스키마는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나뉘어진다.

 

  • 데이터베이스 스키마 자동 생성하기

    • create

      • 기존테이블 삭제 후 다시 생성(DROP + CREATE)

    • create-drop

      • create와 같으나 종료시점에 테이블 DROP (test코드 작성할 때 유용)

    • update

      • 변경분만 반영(운영DB에는 사용하면 안됨)

    • validate

      • 엔티티와 테이블이 정상 매핑되었는지만 확인

    • none

      • 사용하지 않음(운영에서 사용x)

    • hibernate.hbm2ddl.auto

 

  • 데이터베이스 스키마 자동 생성하기 주의

    • 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다.

    • 개발 초기 단계는 create 또는 update

    • 테스트 서버는 update 또는 validate

    • 스테이징과 운영 서버는 validate 또는 none

 

  • create

  • create-drop

  • 매핑 어노테이션

    • @Enumverated
      • 열거형 매핑
      • EnumType.ORDINAL: 순서를 저장(기본값)
      • EnumType.STRING: 열거형 이름을 그대로 저장, 가급적 이것을 사용
    • @Lob
      • CLOB, BLOB 매핑
      • CLOB: String, char[], java.sql.CLOB
      • BLOB: byte[], java.sql.BLOB
    • @Transient
      • DB에 저장은 안하는데 넣어두고 싶은 컬럼에 사용
        • 매핑하지 않음
        • 애플리케이션에서 DB에 저장하지 않음
    • @Column

      • 가장 많이 사용됨
      • insertable, updatable: 읽기 전용
      • nullable: null허용여부 결정, DDL생성시 사용
      • unique: 유니크 제약 조건, DDL생성시 사용
      • columnDefinition, length, precision, scale(DDL)
      • name = "USERNAME"으로 설정하면

 

    • @Id(직접 매핑)

      • IDENTITY: 데이터베이스에 위임, MYSQL

      • SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE

      • @SequenceGenerator 필요

      • TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용

      • @TableGenerator 필요

      • AUTO

      • 방언에 따라 자동 지정, 기본값

  • 권장하는 식별자 전략

    • 기본키 제약조건: null 아님, 유일, 변하면 안된다.

    • 미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리기(대체키)를 사용하자

    • 예를들어 주민등록번호도 기본키로 적절하지 않다.

    • 권장: Long + 대체키 + 키 생성전략 사용

'JPA' 카테고리의 다른 글

[JPA] 기초와 매핑  (0) 2020.05.27
JPA(Java Peresistance API)  (0) 2020.04.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함