2009-10-13 38 views
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> 

现在,我想我的地图是一个EnumMap的一个领域像

Map<MyEnum, String> props; 

我想我需要创建我自己的Hibernate的用户类型为MyEnum,然后引用这个从hbm.xml ...
你有什么知道什么是最好/最简单的方法来实现这一点?
非常感谢

回答

2

休眠已经有一个Enum类型。这是Hibernate注解分布,而不是休眠核心的一部分,但是你可以用XML映射明确指定的类型非常多使用它:

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

我没试过指定枚举作为地图的关键,说实话 - 我不明白为什么它不起作用,但Hibernate documentation说,地图键可以是“基本”类型,并有可能EnumType不符合条件。

但是,请注意,从数据库加载时,您的地图将不是EnumMap。 Hibernate将集合作为自己的类型实现相应的接口(例如Map/Set/List ...)。如果将Map设置为EnumMap是非常重要的(不应该这样做 - 除了次要的性能改进之外,应该没有什么区别),否则将不得不编写自定义类型 - 对于Map本身而不是Enum。这非常困难,因为对于集合来说,它必须在查询中被解除引用 - 我强烈建议不要这样做。