twocowsong

@Enumerated 본문

IT/JPA

@Enumerated

WsCode 2022. 5. 19. 21:30

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

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

@Enumerated

enum 클래스는 다음과 같습니다.

public enum RoleType {
   ADMIN, USER
}

Entity에서 enum을 매핑하면 아래와 같습니다.

@Column(name = "role_type")
@Enumerated(EnumType.STRING)
private RoleType roleType;

 

enum은 다음처럼 사용합니다.

Member member = new Member();
member.setRoleType(RoleType.ADMIN); // -> DB에 문자 ADMIN으로 저장됩니다.

 

@Enumerated.EnumType의 속성은 아래 2개가 있습니다.

@Enumerated(EnumType.STRING)
@Enumerated(EnumType.ORDINAL)

EnumType.ORDINAL은 enum에 정의된 순서대로 ADMIN은 0, USER은 1 값이 DB에 저장됩니다.

- 장점 : DB에 저장되는 데이터 크기가 작습니다.

- 단점 : 이미 저장된 enum의 순서를 변경 할 수 없습니다.

 

EnumType.STRING은 enum이름 그대로 ADMIN은 'ADMIN', USER은 'USER'라는 문자로 DB에 저장됩니다.

- 장점 : 저장된 enum의 순서가 바뀌거나 enum이 추가되어도 안전합니다.

- 단점 : DB에 저장되는 데이터 크기가 ORDINAL에 비해서 큽니다.

 

기본값인 EnumType.ORDINAL은 주의해서 사용해야 합니다.

ADMIN(0), USER(1) 사이에 enum이 하나 추가되서 ADMIN(0), NEW(1), USER(2)로 설정되면 이제부터 USER은 2로 저장되지만 기존에 DB에 저장된 값은 여전히 1로 남아있습니다.

따라서 이런 문제가 발생하지않는 EnumType.STRING을 권장합니다.

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

@Lob  (0) 2022.05.21
@Temporal  (0) 2022.05.20
필드와 컬럼 매핑 : @Column  (0) 2022.05.18
기본 키 매핑 정리  (0) 2022.05.16
AUTO 전략  (0) 2022.05.16