4. 엔티티 매핑 - (4.3 필드와 칼럼 매핑)

HotFried·2023년 9월 25일
0

아래와 같은 요구 사항이 추가되었다.

  • 회원은 일반 회원과 관리자로 구분해야 한다.
  • 회원 가입일과 수정일이 있어야 한다.
  • 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다.
@Entity
public class Member {

    @Id
    private Long id;

    // DB의 칼럼 명 커스텀 가능
    @Column(name = "name")
    private String username;

    private Integer age;

    // DB에는 enum 타입이 없다.
    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    // 날자 타입 매핑
    // DB는 DATE, TIME, TIMESTAMP로 나뉜다.
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    // varchar를 넘어서는 큰 컨텐츠를 넣고 싶을 때 사용한다.
    // String 타입이면 DB에서 clob으로 생성된다.
    @Lob
    private String description;

    // getter, setter
}


@Column

insertable, updatable

  • 해당 column이 수정됐을 때 DB에 insert, update를 할 건지 결정한다.
    -> insert, update 문이 나갈 때 해당 칼럼을 반영할 것인지를 의미한다.
    -> 만약 updateble = false라면 해당 칼럼은 절대 변경되지 않는다.

  • true : 기본 값


@Enumerated

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

ORDINAL은 사용하지 말자.

ex) enum 타입에 Admin, User가 있다. -> 이 때는 Admin : 0, User : 1로 매핑된다.
이 후 SuperAdmin, Admin, User로 변경되었다. -> 기존에 Admin이 0이었는데, SuperAdmin : 0, Admin : 1이 된다.
=> 0은 Admin을 의미했으나 현재는 SuperAdmin이 되었으므로 혼동이 온다.


@Temporal

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

  • LocalDate, LocalDateTime을 사용할 때는 생략이 가능하다.(최신 하이버네이트 지원)

@Lob

데이터베이스 BLOB, CLOB 타입과 매핑

  • @Lob에는 지정할 수 있는 속성이 없다.
  • 매핑하는 필드 타입이 문자면 CLOB, 나머지는 BLOB을 매핑한다.
    -> CLOB: String, char[], java.sql.CLOB
    -> BLOB: byte[], java.sql.BLOB

@Transient

  • 필드 매핑을 하지 않을 때 사용한다.

  • DB에 저장 X, 조회 X

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

@Transient
private Integer temp;

참고 :

김영한. 『자바 ORM 표준 JPA 프로그래밍』. 에이콘, 2015.

자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
꾸준하게

0개의 댓글