본문 바로가기
Spring JPA

엔티티 매핑 - 7

by 홍굴이 2021. 7. 3.

@Entity

  • 테이블과 매핑할 클래스 명시
  • 기본 생성자 필수
  • final, enum, interface, inner 클래스 사용 금지
  • 저장할 필드에 final 사용 금지

    속성 기능 기본값
    name JPA에서 사용할 엔티티 이름을 지정 클래스 이름을 그대로 사용

@Table

  • 엔티티와 매핑할 테이블 지정

    속성 기능 기본값
    name 매핑할 테이블 이름 엔티티 이름을 사용
    catalog catalog 기능이 있는 데이터베이스에서 catalog 매핑  
    schema schema 기능이 있는 데이터베이스에서 catalog 매핑  
    uniqueConstraints(DDL) DDL 생성 시에 유니크 제약조건 생성  

기본 키 매핑 - IDENTITY 전략

  • 기본 키 생성을 데이터베이스에 위임하는 전략
  • 주로 MySQL, PostgreSQL, SQL, Server, DB2에서 사용
    더보기
    참고
    엔티티가 영속 상태가 되려면 반드시 식별자가 필요하다.
    따라서 persist()를 호출하는 즉시 insert SQL이 데이터베이스에 전달된다.
    즉, 트랜잭션을 지원하는 쓰기 지연이 동작하지 않는다.

ㄴㅇㅁㄴ

기본 키 매핑 - SEQUENCE 전략

  • 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트
  • 오라클, PostgreSQL, DB2, H2 데이터베이스에서 주로 사용

    @SequenceGenerator
    속성 기능 기본값
    name 식별자 생성기 이름 필수
    sequenceName 데이터베이스에 등록되어 있는 시퀀스 이름 hibernate_sequence
    initialValue DDL 생성 시에만 사용, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정 1
    allocationSize 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용) 50
    catalog, schema 데이터베이스 catalog, schema 이름  

기본 키 매핑 - TABLE 전략

  • 키 생성 전용 테이블을 하나 만들고 여기에 이름과 값으로 사용할 컬럼을 만들어 데이터베이스 시퀀스를 흉내내는 전략
  • 모든 데이터베이스에 적용 가능

    @TableGenerator
    속성 기능 기본값
    name 식별자 생성기 이름 필수
    table 키생성 테이블 명 hibernate_sequences
    pkColumnName 시퀀스 컬럼명 sequence_name
    valueColumnName 시퀀스 값 컬럼명 next_val
    pkColumnValue 키로 사용할 값 이름 엔티티 이름
    initialValue 초기 값, 마지막으로 생성된 값 기준 0
    allocationSize 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨) 50
    catalog, schema 데이터베이스 catalog, schema 이름  
    uniqueConstraints(DDL) 유니크 제약 조건을 지정할 수 있다.  

기본 키 매핑 - AUTO 전략

  • 선택한 데이터베이스 방언에 따라 IDENTITY, SEQUENCE, TABLE 전략 중 하나를 선택

@Column

  • 객체 필드를 테이블 컬럼에 매핑

    속성 기능 기본값
    name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름
    insertable(거의 사용 x) 엔티티 저장 시 같이 저장
    false로 설정하면 데이터베이스에 저장하지 않는다.
    true
    updatable(거의 사용 x) 엔티티 수정 시 같이 수정
    false로 설정하면 데이터베이스에 수정 하지 않는다.
    true
    table(거의 사용 x) 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용 현재 클래스가 매핑된 테이블
    nullable(DDL) null 값 허용 여부 결정 true
    unique(DDL) @Table의 uniqueConstrains와 같지만 한 컬렘에 간단히 유니크 제약조건을 걸 때 사용 true
    columnDefinition(DDL) 데이터베이스 컬럼 정보를 직접 준다. 필드의 자바 타입과 방언 정보를 사용해서 적절한 컬럼 타입 생성
    length(DDL) 문자 길이 제약조건, String에만 사용 255
    precision, scale(DDL) BigDecimal 타입에서 사용한다(BigInteger 도 가능)
    precision : 소수점을 포함한 전체 자릿수
    scale : 소수의 자릿수
    precision : 19,
    scale = 2

@Enumerated

  • 자바에 enum 타입을 매핑할 때 사용

    속성 기능 기본값
    value EnumType.ORDINAL : enum 순서를 데이터베이스에 저장
    EnumType.STRING : enum 이름을 데이터베이스 저장
    EnumType.ORDINAL

@Temporal

  • 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다.

    속성 기능 기본값
    value TemporalType.DATE : 날짜, 데이터베이스 date 타입과 매핑
    TemporalType.TIME : 데이터베이스 time 타입과 매핑
    TemporalType.TIMESTAMP : 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
    TemporalType은 필수로 지정해야 한다.

@Lob

  • 데이터베이스 BLOB, CLOB 타입과 매핑
  • CLOB : String, char[], ava.sql.CLOB
  • BLOB: byte[], java.sql.BLOB

 

@Transient

  • 이 어노테이션을 사용한 필드는 매핑하지 않는다.

@Access

  • JPA가 엔티티 데이터에 접근하는 방식을 지정한다.
  • 필드 접근 : AccessType.FIELD로 지정 -> 필드에 직접 접근 / 필드 접근 권한이 private이어도 접근 가능
  • 프로퍼티 접근 : AccessType.PROPERTY로 지정 -> 접근자 Getter를 사용

'Spring JPA' 카테고리의 다른 글

다양한 연관관계 매핑 - 9  (0) 2021.07.09
연관관계 매핑 기초 - 8  (0) 2021.07.06
영속성 관리 - 6  (0) 2021.06.29
영속성 관리 - 5  (0) 2021.06.26
JPA 시작 - 4  (0) 2021.06.25

댓글