我的实体定义了一个像
这样的字段Map<String, String> props;
我有这个hibernate xml配置
<map name="props" table="PROPS">
<key column="id"/>
<index column="name" type="string"/>
<element column="value" type="string"/>
</map>
现在我希望我的地图成为像
这样的EnumMapMap<MyEnum, String> props;
我想我需要为MyEnum创建自己的Hibernate UserType,然后从hbm.xml引用它...
您是否知道实现这一目标的最佳/最简单方法是什么?
非常感谢
答案 0 :(得分:2)
Hibernate已经有Enum类型。它是Hibernate Annotations发行版的一部分而不是Hibernate Core,但是你可以通过明确指定类型来使用XML映射:
<property name="myEnum" type="org.hibernate.type.EnumType"/>
我没有尝试将Enum指定为地图密钥,说实话 - 我不明白为什么它不起作用,但是Hibernate documentation说地图密钥可以是“基本”类型而且它是可能EnumType不符合条件。
但请注意,从数据库加载地图时,您的地图不会是 EnumMap 。 Hibernate将集合作为自己的类型返回,实现相应的接口(例如Map / Set / List ...)。如果您将Map作为EnumMap(它不应该是 - 除了轻微的性能改进之外应该没有区别)至关重要,那么您必须为Map本身而不是Enum编写自定义类型。这很难,因为对于集合而言,它必须在查询中可以解除引用 - 我强烈建议不要走这条路。
答案 1 :(得分:0)
尝试@MapKeyEnumerated注释。