필드와 컬럼 매핑

gotcha!!·2023년 9월 8일
0

JPA

목록 보기
7/16

매핑 어노테이션 정리

  • @Column : 컬럼 매핑
  • @Temporal : 날짜 타입 매핑
  • @Enumerated : enum 타입 매핑
  • @Lob : BLOB, CLOB 매핑
  • @Transient : 매핑 무시(특정 필드를 컬럼에 매핑 하지 않음)

@Column

  • name : 필드와 매핑할 테이블의 컬럼 이름 (기본값은 필드 이름)
  • insertable, updateable : 데이터 베이스에 컬럼을 변경할거야 말거야? (기본값은 TRUE)
  • nullable(DDL) : null 값의 허용 여부 설정 (false로 설정하면 DDL 생성 시에 not null 제약조건이 붙음)
  • unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약 조건을 걸 때 사용한다 (그러나 이렇게 사용하면 unique 이름이 이상하게 되어서 @Table로 사용하는 것이 좋다)
  • columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다
    ex) columnDefintion = "varchar(100) default "EMPTY"
  • length(DDL) : 문자 길이 제약 조건, String 타입에서만 사용 (기본값은 255)
  • percision, scale(DDL) : BigDecimal 타입 혹은 BigInteger에서 사용
    참고로 double, float 타입에서는 적용되지 않으며, 아주 큰 숫자나 정밀한 소수를 다루어야할 때 사용

@Enumerated

자바 enum 타입을 매핑할 때 사용한다.

주의사항으로는 EnumType.ORDINAL을 사용하지 않는다.

만약

public enum RoleType {
    USER, ADMIN
}

이렇게 있다고 생각했을 때,
EnumType.ORDINAL을 사용하면 0번째와 1번째로 구분을 한다

그래서 데이터 베이스에 일반 유저이면 0, 관리자이면 1이 들어가게 되는데

만약

public enum RoleType {
    GUEST,USER, ADMIN
}

이렇게 되어버리면
0번째는 GUEST가 되어버리고 순서가 꼬이게 된다.

그래서 가급적 EnumType.STRING을 사용하자

기본값은 EnumType.ORIDNAL이다

@Temporal

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

참고로 LocalDate(xxxx-xx-xx), LocalDateTime(xxxx-xx-xx xx:xx:xx)을 사용할 때는 생략가능(최신 하이버네이트에서 지원)

속성으로는

  • value : TemoralType.DATE : 날짜, 데이터베이스 date 타입과 매핑
    TemporalType.TIME : 시간, 데이터베이스 time 타입과 매핑
    TemporalType.TIMESTAMP : 날짜와 시간 데이터베이스 timestamp 타입과 매핑

@Lob

데이터 베이스 BLOB(이미지 파일), CLOB(긴 문자열) 타입과 매핑

@Lob에는 지정할 수 있는 속성이 없다.

@Transient

  • 필드 매핑 X
  • 데이터 베이스 저장 X, 조회 X

주로 메모리상에서 임시로 어떤 값을 보관하고 싶을 때 사용한다.

@Transient
private Integer temp;
profile
ha lee :)

0개의 댓글