필드와 컬럼 맵핑 & 기본 키 맵핑

최연재·2022년 7월 10일
0

JPA

목록 보기
5/11
  • 맵핑 어노테이션 정리
  • 기본 키 맵핑
  • IDENTITY, SEQUENCE, TABLE 전략

1. 맵핑 어노테이션 정리

1. @Column

  • 컬럼 맵핑
  • 속성
    (1) name : 필드와 맵핑할 테이블의 컬럼 이름
    (2) insertable, updatable : 등록, 변경 가능 여부
    (3) lenght : 문자 길이 제약 조건(String 타입에만 사용)
    (4) precision, scale : precision = 소수점을 포함한 전체 자리수, scale = 소수의 자리수

2. @Enumerated

  • enum 타입 맵핑
  • 속성
    (1) value : EnumType.ORDINAL \to 옛날데이터가 변경되지는 않으니깐, ordinal 사용금지
    => 필수로 EnumType.STRING 사용하기

3. @Temporal

  • 날짜 타입 맵핑
  • 최신 하이버네이트 쓸 경우, 그냥 LocalDate, LocalDateTime을 쓰면 됨.

4. @Lob

  • BLOB, CLOB 맵핑
  • 맵핑하는 필드 타입이 문자면 CLOB, 나머지는 BLOB
    (1) CLOB : String, char[], java.sql.CLOB
    (2) BLOB : byte[], java.sql.BLOB

5. @Transient

  • 특정 필드를 컬럼에 맵핑하지 않는 것
  • 주로 메뢰상에서만 임시로 어떤 값을 보관하고 싶을 때 사용

이렇게 하면 필드와 컬럼 맵핑 끝
뒤에 가서 연관관계 맵핑이 어려움

2. 기본 키 맵핑

1. 기본 키 맵핑 어노테이션

  • @Id
  • @GeneratedValue

2. 기본 키 맵핑 방법

  • IDENTITY
    (1) 주로 키 생성을 데이터베이스에 위임
    (2) AUTO_INCREMENT는 데이터베이스에 insert sql을 실행한 이후에 id값을 알 수 있음
    (em.persist() 시점에 즉시 insert sql 실행하고 db에서 식별자를 조회)

  • SEQUENCE
    (1) 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
    (2) db에 먼저 접근해서 값 확인 후, commit()시점에 쿼리 날리기(근데, 이러면 db에 계속 접근하는 문제가 생김 \to 해결책 : allocateSize를 지정하여 db에는 allocateSize만큼 채워졌을 때 접근하고, 메모리에서 카운트를 진행)

  • TABLE
    (1) 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내내는 전략(단점 : 성능)
    (2) 테이블 전략은 잘 쓰지는 않음

  • AUTO
    (1) 각각의 데이터베이스에 따라서 위의 3개중에 하나 선정

3. 권장하는 식별자 전략

\to 기본 키 제약 조건 : null 아님, 유일, 변하면 안됨
\to 미래까지 이 조건을 만족하는 자연키는 찾기 어려움. 대리키(대체키)를 사용하자
\to autoIncrement, sequence, uuid, 회사 내부의 랜덤 값 등을 사용하기
\to 주민등록번호도 기본 키로 적절하지 않음

이 글은 김영한님의 '자바 ORM 표준 JPA 프로그래밍 - 기본편'을 수강하고 정리한 내용입니다.

profile
가보자고

0개의 댓글