<name, value>
基本的にペアであるプロパティのマップを含むクラスで Hibernate アノテーションを使用しています。プロパティ名は で定義され、PROPERTY enum
各プロパティには許容値のセットがあり、 としても定義されていenum
ます。各プロパティには独自のenum
値が定義されているため、プロパティ マップは次のように定義されます。
Map<PROPERTY, Enum> properties = new EnumMap<PROPERTY, Enum> (PROPERTY.class);
値のマッピングに問題がありEnum
ます。この定義:
@ElementCollection
@MapKeyEnumerated(EnumType.STRING)
@MapKeyColumn(name="name")
@Column(name="value")
@Enumerated(EnumType.STRING)
Map<PROPERTY, Enum> properties = new EnumMap<PROPERTY, Enum> (PROPERTY.class);
次の DDL を生成します。
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;
ご覧のとおり、Enum クラスは としてマッピングされておりtinyblob
、データベースではまったく読み取ることができません。
コンクリートでマップを定義すると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 であるという事実が、私たちに不利にならないことを願っています。
あらゆる支援のためのTIA