我有一个颜色枚举
public enum color { GREEN, WHITE, RED }
我有包含它的MyEntity。
public class MyEntity { private Set<Color> colors; ...
我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要UserType还是最简单的方法? 谢谢
编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释
我使用EnumSet映射线程中的解决方案,该解决方案依赖于的使用<element column>。您只需要一个具有ID和字符串的表即可映射集合(MYENTITY_COLOR此处)。映射看起来像这样(这EnumUserType是Java 5 EnumUserType中的映射):
<element column>
MYENTITY_COLOR
EnumUserType
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <typedef name="color" class="com.stackoverflow.q2402869.EnumUserType"> <param name="enumClassName">com.stackoverflow.q2402869.Color</param> </typedef> <class name="com.stackoverflow.q2402869.MyEntity" entity-name="MyEntity" table="MYENTITY"> <id name="id" type="java.lang.Long"> <column name="ID" /> <generator class="assigned" /> </id> <set name="colors" table="MYENTITY_COLORS"> <key column="ID" not-null="true"/> <element type="color" column="COLOR"/> </set> </class> </hibernate-mapping>
查询可能如下所示:
select distinct e from MyEntity e join e.colors colors where colors IN ('WHITE', 'GREEN')
整个解决方案可 很好地用于加载,保存和查询 (归于jasonab)。