Zayson
A to Zayson!
Zayson
전체 방문자
오늘
어제
  • 분류 전체보기 (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • 완전탐색(Brute-Force) (3)
      • 그리디(Greedy) (6)
      • 투포인터(Two-Pointer) (1)
      • 그래프(Graph) (5)
      • BFS & DFS (9)
      • 구현, 시뮬레이션(Implementation) (5)
      • 다이나믹 프로그래밍(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • 회고 (5)
      • 엔빵 프로젝트 포스트 로드맵 (1)
      • 2022년 (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • 기술 서적 (6)
      • 데이터 중심 애플리케이션 설계 (3)
      • 개발자가 반드시 정복해야할 객체 지향과 디자인 패턴 (2)
      • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 프로그래머스
  • 엔빵프로젝트
  • 관계형 데이터베이스 실전 입문
  • 완전탐색
  • Backend
  • JPA
  • BFS
  • spring boot
  • Java
  • 구현
  • 그리디
  • 백준
  • Computer science
  • 나 혼자 스프링부트!
  • SpringBoot
  • CS
  • dfs
  • Kafka Connect
  • kafka
  • 라이브스터디

최근 글

티스토리

hELLO · Designed By 정상우.
Zayson

A to Zayson!

Backend/JPA

필드와 컬럼 매핑, @Column

2022. 4. 19. 00:39

엔티티 클래스 내 필드는 테이블의 컬럼과 매핑된다 .

컬럼과 필드를 상세하게 매핑하도록 도와주는 애노테이션들을 정리해보자.

 

@Column

말 그대로 필드와 컬럼을 매핑해주는 속성을 가진 애노테이션이다.

// @Column 
public @interface Column {
    String name() default "";                // 필드와 매핑될 실제 DB 테이블 컬럼 이름

    boolean unique() default false;          // 한 개의 컬럼에 유니크 제약조건을 거는 속성이다. @Column의 unique 프로퍼티는 랜덤 값으로 제약조건 이름을 갖기 때문에 @Table 애노테이션의 uniqueConstraint 프로퍼티를 일반적으로 사용한다.

    boolean nullable() default true;         // null 값 허용여부를 설정한다. false로 지정시 컬럼은 Not null 제약조건을 갖는다.

    boolean insertable() default true;       // 해당 컬럼에 등록 가능 여부를 판단하는 프로퍼티

    boolean updatable() default true;        // 해당 컬럼에 변경 가능 여부를 판단하는 프로퍼티

    String columnDefinition() default "";    // 컬럼 정보를 직접 지정할 수 있다. Dialect에 맞게 지정하는 것이 가능하며 입력한 정보를 통해 컬럼이 생성된다.

    String table() default "";           

    int length() default 255;                // String 타입에만 사용되며, 문자 타입의 길이를 지정한다 .

    int precision() default 0;               // 소수점을 포함한 전체 자릿수를 지정할 수 있는 프로퍼티이다. BigDecimal 타입에서 사용된다. (double / float 적용 X)

    int scale() default 0;                   // 소수의 자릿수를 지정할 수 있는 프로퍼티이다. BigDecimal 타입에서 사용된다. (double / float 적용 X)
}

 

@Enumerated

Enum 타입과 매핑을 가능하게 해주는 애노테이션이다. @Enumerated 애노테이션을 통해서 필드 값을 String 으로 주는 것이 아닌 enum 타입으로 주는 것이 가능하다.

value 값은 EnumType.STRING과 ORDINAL이 있다.

default로 설정되어있는 ORDINAL 속성은 순서값이 숫자 타입으로 저장된다. 하지만 , 요구사항 변경으로 인해 순서가 변경되는 경우 DB내 데이터의 순서가 완전함을 보장하지 못하기 때문에 STRING 속성으로 사용하는 것이 중요하다.

public enum Grade {
   GUEST, VIP 
}

public class Member {
   ...
   @Enumerated(EnumType.STRING)     
   private Grade grade;            
}

 

@Lob

DB 내 CLOB, BLOB 타입과 매핑되는 애노테이션이다.

매핑되는 필드가 문자열인 경우 CLOB가 매핑되고, 나머지 타입은 모두 BLOB 타입으로 매핑된다.

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

 

@Temporal

날짜 타입을 매핑할때 사용한다. Java 8 이후 LocalDate와 LocalDateTime을 지원하면서 해당 타입의 필드를 사용하는 경우 @Temporal 애노테이션 없이 날짜 타입을 지정하는 것이 가능하다.

public enum TemporalType {
    DATE,      // 날짜
    TIME,      // 시간
    TIMESTAMP; // 날짜, 시간

    private TemporalType() {
    }
}

 

@Transient

필드와 매핑되지 않도록 해주는 애노테이션이다. 해당 애노테이션과 매핑된 필드는 DB에 저장 및 조회가 되지 않고 메모리 상에서 임시로 값을 보관해 사용하기 위해서 지정한다.

 

📄 References

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 : https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

반응형
저작자표시 (새창열림)

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

다양한 연관관계 매핑  (0) 2022.05.02
단방향, 양방향 매핑  (0) 2022.04.26
기본키 매핑, @Id, @GeneratedValue  (0) 2022.04.19
객체와 테이블 매핑, @Entity, @Table  (0) 2022.04.19
영속성 관리, 영속성 컨텍스트  (0) 2022.04.18
    'Backend/JPA' 카테고리의 다른 글
    • 단방향, 양방향 매핑
    • 기본키 매핑, @Id, @GeneratedValue
    • 객체와 테이블 매핑, @Entity, @Table
    • 영속성 관리, 영속성 컨텍스트
    Zayson
    Zayson
    공부한 내용을 정리하는 공간

    티스토리툴바