JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)

2024. 1. 15. 17:56·JPA
본 내용은 유튜브 나무소리님의 강의 내용을 정리한 내용입니다.
JPA 3-5강 Entity Mapping(5)

@Temporal 어노테이션

  • @Temporal 어노테이션은 영속 객체의 날짜 및 시간 필드에 적용합니다.
  • 자바의 날짜 및 시간 정보는 년, 월, 일과 시, 분, 초를 하나의 필드로 표현할 수 있지만 데이터베이스에 따라 날짜, 시간, 날짜와 시간 컬럼의 타입이 다르기 때문에 이를 @Temporal 어노테이션으로 지정할 수 있습니다.
  • Java 8 이후에는 java.time 패키지의 LocalDate, LocalTime, LocalDateTime을 사용할 경우 적용하지 않습니다.
@Entity
@Table(name = "USERS")
public class User {

    @Id
    @Column(name = "USER_ID", nullable = false)
    private Long userId;
    
    @Column(name = "CREATION_DATE", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date creationDate;
...
}
@Temporal 옵션
TemporalType.DATE 날짜(년,  월, 일)
TemporalType.TIME 시간(시, 분, 초)
TemporalType.TIMESTAMP 날짜와 시간

 

@Lob 어노테이션

  • RDBMS에서 대규모 데이터를 저장하기 위해 BLOB 또는 CLOB 데이터 유형을 지원합니다.
  • BLOB은 Binary Large Object 약어로 기가 바이트 까지의 이미지, 파일, 기타유형의 데이터를 저장합니다.
  • CLOB은 Character Large Object 약어로 기가바이트 까지의 긴 문자열을 저장합니다.
  • @Lob 어노테이션이 선언된 객체의 필드 및 속성의 유형에 따라 BLOB, CLOB이 구분됩니다.
  • 주로 @Basic 어노테이션과 함께 LAZY 로딩으로 선언해서 사용합니다.
@Entity
public class User {

    @Id
    private Long userId;
    
    @Basic(fetch = FetchType.LAZY)
    @Lob
    @Column(name = "picture")
    protected byte[] picture;
...
}
@Basic 어노테이션에서 LAZY 로딩으로 선언하는 경우 find()로 조회시 바로 대용량 데이터(picture)를 반환하는 것이 아니라 picture가 직접 사용이 될 때 해당 데이터를 가져오게 됩니다.

 

@Enumerated 어노테이션

  • @Enumerated (열거형 데이터 매핑)은 열거형 유형을 정의합니다.
  • Enum 유형으로 선언된 값은 배열과 동일하게 ordinal이라 부르는 인덱스 값에 연결됩니다.
  • Enum 유형의 필드 또는 속성을 매핑하는 경우 기본값으로 EnumType.ORDINAL이 적용됩니다.
  • @Enumerated에 명시적으로 EnumType.String을 선언해서 데이터베이스 필드에 문자열을 저장할 수 있습니다.
public enum UserType {
    SELLER, // index = 0
    BIDDER, // index = 1
    SCR,    // index = 2
    ADMIN   // index = 3
}

/* ================================ */

// UserType.SELLER의 경우 0이 저장됨
@Enumerated(EnumType.ORDINAL)
pivate UserType userType;

// UserType.SELLER의 경우 "SELLER"가 저장됨
@Enumerated(EnumType.String)
private UserType userType;
 EnumType.ORDINAL은 프로그램상의 오류가 발생하게 하여 사용하지 않습니다.
예를 들어, 기존의 UserType에 SELLER 다음에 GUSET를 추가하는 경우 INDEX = 1이 BIDDER에서 GUEST로 변경되게 됩니다. 이러한 경우 기존에 BIDDER를 저장한 데이터가 모두 GUEST를 반환하게 됩니다.
// ex) GUEST를 추가하는 경우
public enum UserType {
    SELLER, // index = 0
    GUEST,  // index = 1
    BIDDER, // index = 2
    SCR,    // index = 3
    ADMIN   // index = 4
}

 

@Translent 어노테이션

  • @Translent 어노테이션이 적용된 필드는 영속화 되지 않습니다.
  • @Translent 어노테이션은 주로 실행 시점에 참조되는 필드 또는 계산되는 필드에 사용됩니다.
  • 속성(property) 기반 접근일 경우 @Transient 어노테이션은 getter에 적용합니다.
  • 자바에서 제공하는 transient 키워드와 @Transient 어노테이션의 사용목적은 거의 동일합니다.
@Entity
public class Category {
    @Transient
    protected Long activeUserCount;
    transient public String generatedName;
    
    ...
    public Category() { ... }
}

'JPA' 카테고리의 다른 글

JPA 기초 - @Embeddable  (0) 2024.01.17
JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)  (0) 2024.01.16
JPA 기초 - 연관 관계의 이해  (0) 2024.01.16
JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)  (0) 2024.01.15
JPA 기초 - 기본키 생성 전략(Sequence)  (0) 2024.01.14
'JPA' 카테고리의 다른 글
  • JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)
  • JPA 기초 - 연관 관계의 이해
  • JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)
  • JPA 기초 - 기본키 생성 전략(Sequence)
PortLee
PortLee
  • PortLee
    프로그래밍 공부
    PortLee
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C++
      • JAVA
      • JPA
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MemberService
    JPA
    MemberRepository
    @Access
    set
    식별자공유
    SQL Mapping
    @AttributeOverride
    @Embeddable
    Entity 연관관계
    1-1연관관계
    컬렉션 매핑
    MemberEntity
    다른 테이블 매핑
    entity mapping
    Table 기본키 생성 전략
    Entity
    allocationSize
    기본키 매핑
    map
    1-N
    @Table
    @Basic
    @CollectionTable
    Translent
    JoinColumn
    persistence.xml
    컬랙션 매핑
    필드와 컬럼 매핑
    list
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
PortLee
JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)
상단으로

티스토리툴바