2011-11-18 2 views
6

내 응용 프로그램에 사용 된 사전 (예 : 성별, 남성, 여성)이 있다고 가정합니다.JPA에서 enum 기반 사전 구현 2

이 사전을 Java enum으로 사용하고 싶습니다. 또한이 사전 값은 다른 테이블에서 참조되므로 별도 표을 사용하고 싶습니다.

Java enum은 엔티티 자체 일 수 없습니다. 내 엔티티 클래스에서 enum 속성 (주석이 달린 @Enumerated)을 사용할 수는 있지만 테이블에 정수 테이블, 정수 또는 문자열로 열거 형을 저장하므로 사전 테이블에 FK를 사용하는 대신 enum을 사용합니다.

이러한 유스 케이스를 어떻게 구현합니까?
- enum 값을 생성하는 정적 방법으로 Dictionary 엔티티를 만드시겠습니까?
- Dictionary 인스턴스 대신 enum을 반환하는 Dictionary에 대한 getter 및 setter를 수정 했습니까?
... 또는 enum을 별도의 테이블에 보관할 필요가 없습니까?

답변

0

enum의 서수와 일치하는 정수 ID 값을 사용하여 사전 표를 정의 할 수 있습니다. JPA는 @Enumerated 주석에 EnumType.ORDINAL 수정자를 사용할 때 ordinal() 메서드를 사용합니다.이 방법은 값을 쉽게 수정할 수 없으므로 취약합니다.

더 좋게는 EnumType.STRING을 지정하고 enum의 값 이름과 동일한 값을 사용하여 사전 표의 기본 키 열을 VARCHAR으로 정의 할 수 있습니다. 여전히 더 이상 enum 이름을 바꿀 수 없다는 점에서 취약합니다.

answer for this question은 다른 옵션을 보여줍니다. 엔티티에 정수로 고정하지만 접근 자로 변환합니다.

0

이 방법으로 달성 할 수 있습니다.

public enum Gender{ 
MALE(1L), 
FEMALE(2L); 

private final Long id; 

Gender(Long id) { 
    this.id= id; 
} 

public Long getId(){ 
    return id; 
} 

2. 캔 스토어 ID는

public class RefGenderEntity { private Long id; private String value; ...... } 

3. 봐

의 EntityManager # findById 메소드에서이 열거에 별도의 법인

관련

1. 열거

MyObjectThatStoreIdForGender val = ...... ; RefGenderEntity gender = em.find(RefGenderEntity.class, val.getGenderId()); 

물론 RefGenderEntity 테이블에는 두 개의 값이 미리 채워질 수 있으며 외래 키와 정상적인 정상 작업 조인을 사용할 수 있습니다.