Hibernate - как сопоставить EnumSet

У меня есть цветовое перечисление

public enum color { GREEN, WHITE, RED } 

и у меня есть MyEntity, который содержит его.

public class MyEntity {
   private Set<Color> colors;
   ...

у меня уже есть тип пользователя для сопоставления моих перечислений.
Вы знаете, как сопоставить набор перечислений в Hibernate hbm.в XML?
Мне нужен UserType или есть самый простой способ?
спасибо

edit: просто чтобы отметить, я ищу hbm.в XML конфигурация не аннотация @CollectionOfElements

2 ответов


я использую решение из отображение EnumSet поток, который полагается на использование <element column>. Вам просто нужна таблица с идентификатором и строкой для сопоставления коллекции (MYENTITY_COLOR здесь). И отображение выглядит так (EnumUserType С Java 5 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).


кажется, вам нужно использовать аннотацию @CollectionOfElements. Док находится на http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-collection-extratype, глава ' 2.4.6.2.5. Коллекция элементов или составных элементов. В Примере также сопоставляется набор перечислений.