2009-10-13 62 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。這非常困難,因爲對於集合來說,它必須在查詢中被解除引用 - 我強烈建議不要這樣做。