У меня есть цветное перечисление
public enum color { GREEN, WHITE, RED }
и у меня есть MyEntity, который содержит его.
public class MyEntity {
private Set<Color> colors;
...
У меня уже есть UserType для отображения моих Перечислений.
Вы знаете, как отобразить ряд Перечислений в Быть в спящем режиме hbm.xml?
Мне нужен UserType или существует самый легкий путь?
Спасибо
править: Только для комментирования я ищу конфигурацию hbm.xml не @CollectionOfElements Аннотация
Я использую решение из потока EnumSet mapping , который полагается на использование
. Вам просто нужна таблица с идентификатором и строкой для сопоставления коллекции (здесь 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. Коллекция элементов или составных элементов". Пример также отображает набор Enum.