0

私のエンティティは次のようなフィールドを定義します

Map<String, String> props;

私はこの休止状態のxml構成を持っています

<map name="props" table="PROPS">  
    <key column="id"/>  
    <index column="name" type="string"/>  
    <element column="value" type="string"/>  
</map>

今、私は自分の Map を EnumMap のようにしたい

Map<MyEnum, String> props;

MyEnum 用に独自の Hibernate UserType を作成し、これを hbm.xml から参照する必要があると思います...
これを達成するための最良/最も簡単な方法は何ですか?
どうもありがとう

4

2 に答える 2

1

Hibernate にはすでにEnum型があります。これは Hibernate Core ではなく Hibernate Annotations ディストリビューションの一部ですが、型を明示的に指定することで XML マッピングで非常によく使用できます。

<property name="myEnum" type="org.hibernate.type.EnumType"/>

正直なところ、Enum をマップ キーとして指定しようとはしていません。なぜ機能しないのかわかりませんが、Hibernate のドキュメントによると、マップ キーは「基本」型である可能性があり、EnumType が修飾されない可能性があります。 .

ただし、データベースからロードされた場合、Map はEnumMapではないことに注意してください。Hibernate はコレクションを、対応するインターフェース (Map / Set / List など) を実装した独自の型として返します。Map を EnumMap にすることが重要な場合 (そうであってはなりません - わずかなパフォーマンスの向上以外には違いはないはずです)、Enum ではなく Map 自体のカスタム タイプを記述する必要があります。コレクションの場合、クエリで逆参照できるようにする必要があるため、かなり難しいです。この方法を使用しないことを強くお勧めします。

于 2009-10-13T17:11:04.217 に答える
0

@MapKeyEnumeratedアノテーションを試してください。

于 2015-11-12T10:23:45.087 に答える