2013-03-20 7 views
3

기본적으로 <name, value> 쌍인 속성 맵을 포함하는 클래스에서 Hibernate 주석을 사용하고 있습니다. 속성 이름은 PROPERTY enum에 정의되어 있으며 각 속성에는 허용되는 값 집합이 있으며 enum으로 정의됩니다. 각 속성의 값을 정의 enum 자신을 가지고 있기 때문에, 부동산지도는최대 절전 모드에서 열거 형 값으로 EnumMap에 주석을 추가하는 방법은 무엇입니까?

Map<PROPERTY, Enum> properties = new EnumMap<PROPERTY, Enum> (PROPERTY.class); 

나는 문제가 Enum 값을 매핑하는 데 문제로 정의된다. 이 정의 : 당신이 볼 수 있듯이

create table EnumMapTest (
    id bigint not null auto_increment, 
    primary key (id) 
) ENGINE=InnoDB; 

create table EnumMapTest_properties (
    EnumMapTest_id bigint not null, 
    value tinyblob, 
    name varchar(255) not null, 
    primary key (EnumMapTest_id, name) 
) ENGINE=InnoDB; 

, 열거 클래스가 tinyblob로 매핑되고, 데이터베이스에 완전히 읽을 수 :

@ElementCollection 
@MapKeyEnumerated(EnumType.STRING) 
@MapKeyColumn(name="name") 
@Column(name="value") 
@Enumerated(EnumType.STRING) 
Map<PROPERTY, Enum> properties = new EnumMap<PROPERTY, Enum> (PROPERTY.class); 

는 다음의 DDL을 생성합니다. 나는 구체적인 enum

enum VALUE {ONE, TWO, THREE}; 

@ElementCollection 
@MapKeyEnumerated(EnumType.STRING) 
@MapKeyColumn(name="name") 
@Column(name="value") 
@Enumerated(EnumType.STRING) 
Map<PROPERTY, VALUE> properties = new EnumMap<PROPERTY, VALUE> (PROPERTY.class); 

으로지도를 정의하면

는 매핑은 괜찮 :

create table EnumMapTest_properties (
    EnumMapTest_id bigint not null, 
    value varchar(255), 
    name varchar(255) not null, 
    primary key (EnumMapTest_id, name) 
) ENGINE=InnoDB; 

그래서 문제가 Enum 클래스 자체의 매핑입니다.

사용자 지정 형식을 만들지 않고도 열거 형 (가급적이면 문자열)에 열거 형을 매핑하는 방법이 있습니까?

우리가 여전히 Hibernate 3.6.10에 있다는 사실이 우리에게 불리하지 않기를 바랍니다. 어떤 도움

답변

1

당신은 어떤 유형을 지정하지 않으면, 최대 절전 모드가 직렬화를 사용하여 저장을위한

TIA. 그래서 작은 벌브가 생깁니다.

귀하의 경우에는 Enum 값을 사용하기 때문에 문자열 맵 (Map<PROPERTY, String>)을 만드는 것이 좋습니다. enum을 손으로 문자열로 변환해야하지만 (enum-class 이름과 enum-name의 조합) 읽을 수는 있습니다.

+0

내가 그 일을 끝냈다. 감사. 나는 수동 변환을 저장하고 싶었다. –