새소식

xub2의 개발 새발 🐾
💽 Database/JPA

[JPA] 엔티티 매핑 - 2 : 필드와 컬럼 매핑

2025. 9. 13. 12:50

  • -

매핑 예시 엔티티

예를 들어 다음과 같은 회원 테이블이 있다고 가정하자.

@Entity
@Getter @Setter
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 LocalDateTime createdDate;

    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime lastModifiedDate;

    @Lob
    private String description;

}

@ID : PK 값 매핑

@Column : 필드와 컬럼 매핑

@Enumerated : Enum타입 매핑

@Temporal : 날짜 타입 매핑

@Lob : Blob / Clob 매핑

@Transient : 특정 필드를 컬럼에 매핑하지 않음(메모리에서만 사용)

이런 DDL이 나감

 


@Column

@Column(name = "name",
        insertable = false,
        nullable = false,
        unique = true,
        columnDefinition = "varchar(100) default EMPTY",
        length = 255)
private String username;

name : 필드와 매핑할 컬럼 이름

insertable / updateable : 등록 변경 가능 여부 -> 기본 값은 True

nullable : null 여부 선택 -> false로 설정시 DDL 생성시 notnull 제약 붙음

unique : unique 제약 조건을 걸 때 사용 -> 그런데 제약 이름이 랜덤 값으로 지정 되므로 잘 안씀

columnDefinition : 직접 제약을 입력

length : 길이 제한

 

@Enumerated

두가지 옵션이 있다. 반드시 STRING 을 쓰자 . ORDINAL 쓰면 안됨!

Ordinal : ENUM에 저장된 타입 순서대로 적용

String : ENUM에 저장된 이름을 적용

 

예를 들어 ENUM에 ADMIN(0), USER(1) 순서로 저장했다고 가정하자. 괄호 안에 숫자는 순번

ORDINAL 사용시 순번 순서대로 적용한다.

만약 GUEST라는 타입을 추가하게 되어 다음과 같이 ENUM 코드가 수정되었다고 가정하자.

-> GUEST(0), ADMIN(1), USER(2)

이렇게 순서가 수정되어 버리면, 기존에 ADMIN이었던 데이터들이 모두 GUEST로 바뀌게 되고, USER 데이터들은 모두 ADMIN이 되게 된다.

즉, 이름 자체를 통해 매핑이 적용되도록 설정해야 한다.

*********기본값이 ORDNIAL이기 떄문에, ENUM 타입 사용시 반드시 옵션 지정은 선택 아닌 필수***********

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.