본문 바로가기
Spring/JPA

Enum 사용 예제

by step 1 2021. 7. 18.
반응형

Enum: 열거형으로 객체를 새로 생성할 때 사용한다.

 

코드

package com.example.bookmanager.domain;

public enum Gender {
    MALE,
    FEMALE
}

User 객체에 추가

private Gender gender;

enum 값을 확인하기 위해 쿼리 작성 (JpaRepository를 상속받은 위치에서 작성한다.)

    // enum test
    // 사용자가 쿼리를 직접 입력하고 반영할 수 있도록 설정
    @Query(value = "select * from user limit 1;", nativeQuery = true)
    Map<String, Object> findRawRecord();

테스트 코드

@Test
void enumTest(){
    Dto();
    User user = userRepository.findById(1L).orElseThrow(RuntimeException::new);
    user.setGender(Gender.MALE);

    userRepository.save(user);
    userRepository.findAll().forEach(System.out::println);
    System.out.println(userRepository.findRawRecord().get("gender"));
}

 

확인

선언한 값이 정확하게 들어간 것을 확인할 수 있다.
쿼리 확인
원하는 값이 아닌 0이라는 값이 찍히는 것을 확인

 

이러한 문제가 발생하면 나중에 열거를 선언한 객체에 값을 추가하게 되면 DB에 입력한 데이터의 매핑된 데이터가 조회되는 데이터가 달라지는 문제가 발생할 수 있다.

따라서 객체 변수에 @Enumerated(value = EnumType.STRING) 어노테이션을 선언해 준다.

    @Enumerated(value = EnumType.STRING)
    private Gender gender;

문자로 나타나는 것을 확인할 수 있다.

참고 사이트

https://lng1982.tistory.com/280

 

9. [JPA] @Enumerated

자바 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다. @Enumerated 애노테이션에는 두 가지 EnumType이 존재한다. EnumType.ORDINAL : enum 순서 값을 DB에 저장 EnumType.STRING : enum 이름을 ..

lng1982.tistory.com

 

반응형

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

Entity Listener 사용 예제 2  (0) 2021.07.18
Entity Listener  (0) 2021.07.18
Entity 기본 속성  (0) 2021.07.18
Query Method 예제 - 5(페이징 처리)  (0) 2021.07.17
Query Method 예제 - 4 (정렬)  (0) 2021.07.17