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 Annotations 发行版而不是 Hibernate Core 的一部分,但是您可以通过显式指定类型将它与 XML 映射一起使用:

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

老实说,我没有尝试将 Enum 指定为映射键 - 我不明白为什么它不起作用,但是Hibernate 文档说映射键可以是“基本”类型,并且 EnumType 可能不符合条件.

但是请注意,当您的 Map从数据库加载时,它不会是EnumMap 。Hibernate 将集合作为它自己的类型返回,这些类型实现了相应的接口(例如 Map / Set / List ...)。如果将 Map 作为 EnumMap 对您来说至关重要(它不应该是 - 除了较小的性能改进之外应该没有区别),那么您将不得不为 Map 本身而不是 Enum 编写自定义类型。这相当困难,因为对于集合,它必须在查询中可以取消引用——我强烈建议不要走这条路。

于 2009-10-13T17:11:04.217 回答
0

尝试@MapKeyEnumerated注释。

于 2015-11-12T10:23:45.087 回答