Hibernate - как отобразить EnumSet - PullRequest
7 голосов
/ 08 марта 2010

У меня есть цвет Enum

public enum color { GREEN, WHITE, RED } 

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 09 марта 2010

Я использую решение из потока EnumSet mapping , в котором используется <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).

2 голосов
/ 08 марта 2010

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

...