본문 바로가기

Study/JPA

[JPA] JPA 필드와 컬럼 매핑

JPA 필드와 컬럼 매핑

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

  • DDL을 애플리케이션 실행 시점에 자동 생성
  • 테이블 중삼 -> 객체 중심
  • 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
  • 이렇게 생성된 DDL은 개발 장비에서만 사용
  • 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용

hibernate.hbm2ddl.auto (어지간해서는 개발단계에서만 사용. 운영단계 사용 x)
  • create : 기존테이블 삭제 후 다시 생성
  • create-drop : create와 같으나 종료시점에 테이블 DROP
  • update : 변경분만 반영 (운영DB에는 사용하면 안된다.)
  • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none : auto 기능을 사용하지 않음.
<property name="hibernate.hbm2ddl.auto" value="create" />

위와 같은 property를 추가해주면 DTO에 맞춰 테이블을 자동 생성해준다.


주의

  • 운영장비에는 create, create-drop, update 사용하지 않기.
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

매핑 어노테이션

  • @Column
  • @Temporal
  • @Enumerated
  • @Lob
  • @Transient

@Column

  • 가장 많이 사용된다.

  • name : 필드와 매핑할 테이블의 컬럼 이름

    @Column(name="USERNAME")
    public String name;
  • insertable, updatable : 읽기 전용

  • nullable : null 허용 여부 결정, DDL 생성시 사용

    @Column(nullable = false)  // not null
  • unique : 유니크 제약 조건, DDL 생성시 사용

  • columnDefinition, length, precision, scale(DDL)


@Temporal

  • 날짜 타입 매핑

    @Temporal(TemporalType.DATE)
    private Date date;            // 날짜
    
    @Temporal(TemporalType.TIME)
    private Date time;            // 시간
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date timestamp;        // 날짜와 시간

@Enumerated

  • 열거형 매핑

  • EnumType.ORDINAL : 순서를 저장(Default)

  • EnumType.STRING : 열거형 이름을 그대로 저장

  • ORDINAL 사용 시 enum 클래스에 저장된 순서대로 번호가 매겨지는 데 순서가 바뀔경우 큰 오류가 생길 수 있으므로 가급적 STRING을 사용.

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

@Lob

  • CLOB, BLOB 매핑 => 필드에 따라 알아서 매핑된다.

  • CLOB : String, char[], java.sql.CLOB

  • BLOB : byte[], java.sql.BLOB

    @Lob
    private String lobString;
    
    @Lob
    private byte[] lobByte;

@Transient

  • 이 필드는 매핑하지 않는다.
  • 애플리케이션에서 DB에 저장하지 않는 필드에 사용.

식별자 매핑 어노테이션

  • @Id
  • @GeneratedValue

식별자 매핑 방법

  • @Id : 직접 매핑
  • IDENTITY : 데이터베이스에 위임, MYSQL
  • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE (@SequenceGenerator 필요)
  • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용 (@TableGenerator 필요)
  • AUTO : 방언에 따라 자동 지정, 기본값

권장하는 식별자 전략

  • 기본 키 제약 조건 : null 아님, 유일, 불변해야한다.
  • *미래까지 *이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.
  • 예를 들어 주민등록번호도 기본 키로 적절하지 않다.
  • 권장 : Long + 대체키 + 키 생성전략 사용

참고 자료 : TAcademy youtube

'Study > JPA' 카테고리의 다른 글

[JPA] JPA 내부 구조  (0) 2022.01.12
[JPA] 양방향 매핑  (0) 2022.01.12
[JPA] 연관관계 매핑  (0) 2022.01.11
[JPA] JPA 기본과 매핑  (0) 2022.01.10
[JPA] JPA를 사용하는 이유  (0) 2022.01.10