본문 바로가기

Programming/JPA

[JPA] 필드와 컬럼 매핑

반응형

아래 요구사항이 추가되었다고 가정합니다.

  • 회원은 일반 회원과 관리자로 구분한다.
  • 회원 가입일과 수정일이 있어야 한다.
  • 회원을 설명할 수 있는 필드가 필요하다. 이 필드는 길이 제한이 없다.

요구사항에 따라 엔티티 클래스를 구성합니다.

 

import javax.persistence.*;
import java.util.Date;

@Entity
public class Member {

    @Id
    private Long id;

    // DB 컬럼명 설정
    @Column(name = "name")
    private String name;

    private int age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    // DB에 대용량의 값을 넣으려면 Lob으로 한다.
    @Lob
    private String description;

    public Member() {
    }

    public Member(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public enum RoleType {
    USER, ADMIN
}

 

매핑 어노테이션의 구분

  • @Column: 컬럼 매핑
  • @Temporal: 날짜 타입 매핑
  • @Enumerated: enum 타입 매핑
  • @Lob: BLOB, CLOB 매핑
  • @Transient: 특정 필드 컬럼을 DB에 매핑하지 않고 서버에서만 사용하고 싶을 때 사용한다.

매핑 어노테이션의 구분 - @Column

 

https://velog.io/@syleemk/JPA-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91

 

매핑 어노테이션의 구분 - @Enumerated

enum타입 매핑시 사용됩니다.
한 가지 주의할 점은, ORDINAL 사용을 지양해야 한다는 것입니다. ORDINAL을 사용하면 의도하지 않은 순서에 의한 문제가 발생할 가능성이 높습니다.
장기적인 관점에서 STRING 으로 사용해서 관리하는 것이 좋습니다.

 

https://velog.io/@syleemk/JPA-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91

 

매핑 어노테이션의 구분 - @Temporal

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

참고: LocalDate, LocalDateTime을 사용할 때는 생략 가능합니다.(최신 하이버네이트 환경에서 지원)

  • TemporalType.DATE: 날짜, 데이터베이스 date 타입과 매핑
    • ex) 2013-10-11
  • TemporalType.TIME: 시간, 데이터베이스 time 타입과 매핑
    • ex) 11:11:11
  • TemporalType.TIMESTAMP: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
    • ex) 2013-10-11 11:11:11

매핑 어노테이션의 구분 - @Lob

데이터베이스 BLOB, CLOB 타입과 매핑됩니다.

@Lob에는 저장할 수 있는 속성이 없습니다.
매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑 입니다.

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

매핑 어노테이션의 구분 - @Transient

컬럼을 매핑에서 제외하고 싶을 때 사용하는 어노테이션 입니다.

데이터베이스에 저장 및 조회되지 않습니다.

주로 메모리상에서만 임시로 어떤 값을 보관하고 싶은 경우 사용합니다.

참고

반응형

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

[JPA] H2 Database 새로운 데이터베이스 생성 오류 관련  (0) 2022.05.01
[JPA] 기본 키 매핑  (0) 2022.04.30
[JPA] 엔티티 매핑  (0) 2022.04.30
[JPA] 영속성 컨텍스트  (0) 2022.04.30
[JPA] JPA 시작!  (0) 2022.04.30