2012-04-21 2 views
9

JPA2에 키와 값 모두 enum (Map<Enum, Enum>) 인 맵을 저장하는 데 도움이 필요합니다. Hibernate를 JPA 제공자로 사용하여 열거 형을 blob로 저장하지만 문자열로 저장된 데이터가 필요합니다. 이 문제를 해결하기 위해 다음 주석을 사용했습니다.스토어 맵 을 문자열로

@ElementCollection(fetch = FetchType.EAGER) 
@MapKeyEnumerated(value = EnumType.STRING) 
public Map<Enum, Enum> getElementsMap() { 
    return elementsMap; 
} 

그러나 데이터는 여전히 blob로 DB에 저장됩니다. 누구든지이 문제를 해결 했습니까?

+2

문자열은 '아무튼으로지도를 저장 소리가 현명하다. 데이터 정규화에 대해 들어 보셨습니까? –

+0

죄송합니다,이 질문을 잘못된 방식으로 작성했습니다. 이제는 고정되어 있습니다. 키를 의미하고 값입니다. – user1289877

+0

키와 값 모두에서'toString()'을 사용할 수 있습니다. 뭐가 문제 야? –

답변

1

거의 모든 자바 객체는 toString() method입니다. 데이터베이스에서지도를 나타내려면이 옵션을 선택하는 것이 좋습니다.

그러나 키 또는 값의 요소가 아니라 저장할 MAP이 맞는지 확인해야합니다.

+0

네, 키이고 값입니다. JPA2로 시작해서 최대 절전 모드로 시작합니다.이 키와 값을 String으로 저장하려면 코드의 변경 사항을 여기에 게시 할 수 있습니까? – user1289877

3

@Enumerated는 값 유형을 정의하는 데 사용됩니다. 키와 값 모두 열이 저장됩니다 열거의 VARCHAR에 이름이 테이블에 대한지도를 다음과 같습니다

@Enumerated(EnumType.STRING) 
@ElementCollection(fetch = FetchType.EAGER) 
@MapKeyEnumerated(value = EnumType.STRING) 
public Map<MyEnum, MyOtherEnum> elementsMap = new HashMap<>(); 

그것은 대략 다음 표 생성합니다 :

[NAME_OF_ENTITY]_ELEMENTSMAP (
    NAME_OF_ENTITY_ID INTEGER, 
    ELEMENTSMAP VARCHAR(255), 
    ELEMENTSMAP_KEY VARCHAR(255) 
) 
+0

귀하의 게시물 주셔서 감사합니다, 나는 그것을 시도했지만 도움이되지 않았다. 나는 postgresql db를 사용하고 최대 절전 모드로 테이블에 int8, bytea, bytea 데이터 형식을 생성합니다. – user1289877

관련 문제