본문 바로가기

Dev/JPA

RS) 필드와 컬럼 매핑

매핑 어노테이션 정리

  • @Column - 컬럼 매핑 (엔티티와 디비에서의 컬럼이 다를 경우)
    • 세부 속성 정리
      • name : 필드와 매핑할 테이블의 컬럼 이름
      • insertable, updatable : 등록, 변경 가능 여부 / 기본 값 : True
      • nullable(DDL) : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성시에 not null 제약조건이 붙는다.
      • unique(DDL) : @Table의 uniqueConstraints와 같지만 컬럼에 간단히 유니크 제약조건을 걸 때 사용
        • 복합으로는 사용할 수 없다
        • 컬럼 명 자체에 거는 것은 사용하지 않는다.
          // 잘못된 예시
          @Entity
          public class Member {
              @Id
              private Long id;
              // username 컬럼 자체에 제약조건을 거는 방법은 사용하지 말자
              @Column(name = "name", unique = false) 
              private String username;
          // 올바른 방법 
          @Entity 
          // @Table 어노테이션을 통해 테이블 자체에 제약조건을 걸면, 이름도 따로 명시해줄 수 있다. 
          @Table(uniqueConstraints = ) 
          public class Member { 
          
          @Id 
          private Long id; 
          
          @Column(name = "name") 
          private String username;​
      • columnDefinition  : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
        • ex) @Column (name = "name", columnDefinition = "varchar(100) default 'EMPTY')
      • precision, scale : 아주 큰 숫자 형태의 컬럼에서 사용할 수 있다.
  • @Temporal - 날짜 타입 매핑 (옛날 버전일 경우 사용)
    • 최신버전이라면 LocalDate, LocalDateTime을 사용하면 된다.
    • LocalDate를 사용하면 JPA가 알아서 Date로, LocalDateTime을 사용하면 timestamp로 바꿔준다.
          // 옛날 버전에서 사용
      //    @Temporal(TemporalType.TIMESTAMP)
      //    private Date createdDate;
      //
      //    @Temporal(TemporalType.TIMESTAMP)
      //    private Date lastModifiedDate;
      
      	// 아래처럼 사용하자
          private LocalDate testLocalDate;
          private LocalDateTime testLocalDateTime;
          
          /* 실행 결과
              create table Member (
             id bigint not null,
              age integer,
              createdDate timestamp,
              description clob,
              lastModifiedDate timestamp,
              roleType varchar(255),
              // 날짜형 바꿔준 부분
              testLocalDate date,
              testLocalDateTime timestamp,
              name varchar(255),
          */​
  • @Enumerated - enum 타입을 매핑할 때 사용
    • DEFAULT 값이 EnumType.ORDINAL 옵션인데 ORDINAL은 순서문제가 있으므로 사용하지 않는다
      // 반드시 EnumType에는 STRING 타입으로 명시해준다.
      @Enumerated(EnumType.STRING)
  • @Lob - BLOB, CLOB 매핑
    • Lob에는 지정할 수 있는 속성이 없다.
    • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑
  • @Transient - DB랑은 관계없이 메모리에서만 계산하고 싶을 때 사용
    • 연관관계를 짓고싶지 않을 경우 (메모리에 임시로 계산하고 싶을 경우 사용)
    • ex) 캐시

 

 

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

RS) 실전예제를 통한 문제점 분석  (0) 2022.02.06
RS) 기본키 매핑  (0) 2022.02.03
RS) 객체 테이블 매핑  (0) 2022.02.02
RS) 준영속 상태  (0) 2022.02.01
RS) 플러시(flush)  (0) 2022.02.01