본문 바로가기
JPA

JPA 엔티티 매핑 - 필드와 컬럼 매핑

by 근즈리얼 2021. 11. 23.
728x90

이번 포스팅에서는 필드와 컬럼 매핑에 대해서 알아보겠습니다.

 

Member 엔티티를 만들어 보겠습니다.

package hellojpa;

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

@Entity
public class Member {

    @Id
    private Long id;

    @Column(name = "name")
    private String username;

    private Integer age;

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createDate;

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;

    @Lob
    private String description;

    public Member(){

    }
}

Membe 엔티티에 맞게 table이 생성된 것을 볼 수 있습니다.

- age는 integer로 생성되었습니다.

- enum 타입을 string으로 했기 때문에 varchar로 생성된 것을 볼 수 있습니다.

 

이번에는 Meber에 붙어 있는 어노테이션에 대해서 알아보겠습니다.

어노테이션 설명
@Column 컬럼 매핑
@Temporal 날짜 타입 매핑 (현재는 쓸모 x)
@Enumerated enum 타입 매핑
@Lob BLOB, CLOB 매핑
@Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

 

@Column 상세 설명

속성 설명 기본값
name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름
insertable, updatable 등록, 변경 가능 여부 TRUE
nullable null 값의 허용 여부를 설정합니다  
unique @Table의 UniqueConstraints와 같습니다. 간단하게 유니크 제약조건을 걸 때 사용합니다.  
columnDefinition 데이터베이스 컬럼 정보를 직접 줄수 있습니다.  
length 문자 길이 제약조건입니다. String 타입에만 존재합니다.  

 

다양한 column의 속성을 부여해본 결과입니다.

필드값 username에 다양한 속성을 부여했습니다.

- name으로 이름을 줬습니다.

- nullable값을 false로 줘서 table을 생성할 때 not null이 만들어졌습니다.

- length를 10으로 주어 varChar(10)으로 테이블을 만들었습니다.

- unique를 true로 만들어 제약조건을 걸었습니다.

* 여기서 주의해야할 점이 있습니다.

- 임의의 문자열로 표현되기 때문에 unique속성을 사용하기 보다는 table에서 UniqueConstraints를 사용하는 것이 더 효과적입니다.


@Enumerated

- 자바 enum타입을 매핑할 때 사용합니다.

- Enumtype.ORDINAL : enum 순서를 데이터베이스에 저장합니다.

- Enumtype.STRING : enum이름을 데이터베이스 저장합니다.

 

기본값 : Enumtype.ORDINAL 입니다.

예시를 먼저 보여드리겠습니다.

enum 값
현재 EnumType이 ORDINAL

 

RoleType을 user를 넣었을 때입니다.

데이터베이스에 roleType의 순서가 저장되는 것을 볼 수 있습니다.

 

그렇다면 CLIENT라는 속성을 만들어서 넣어보겠습니다.

CLIENT 속성을 만들어 넣고

새로운 member를 만들고 CLIENT 속성을 넣었습니다.

결과는 놀랍게도 ROLETYPE가 모두 0인 것을 볼 수 있습니다.

즉, 타입을 새롭게 추가했을 때 예상하지 못한 에러가 발생할 수 있습니다.

 

이번에는 Enumtype.STRING 를 사용해보겠습니다.

ROLETYPE으로 CLIENT가 생긴것을 볼 수 있습니다.


@Temporal

- 날짜 타입을 매핑할 때 사용합니다.

- 자바 8부터는 localDate, LocalDateTime을 사용할 수 있기 때문에 따로 어노테이션을 사용하지 않아도 됩니다.

특별한 어노테이션 없이 table이 잘 생성된 것을 볼 수 있습니다.

 

출처

https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

 

728x90

댓글