Hibernate: как замэпить Map с ключами - Enum?

Тема в разделе "Java", создана пользователем Dymytry, 11 июл 2011.

  1. Dymytry

    Dymytry Гость

    День добрый!

    Ситуация следующая: надо замэпить через XML-мэппинг аттрибут класса вида:
    Код (Text):
    Map<MY_ENUM, SomeClass> myMap = new HashMap<MY_ENUM, SomeClass>();
    Мой путь был таков: сначала я попробовал реализовать упрощенный случай: Map<KeyClass, Integer> через
    Код (Text):
    <map name="myMap" cascade="all">
    <key column="parent_id"/>
    <map-key-many-to-many class="system.KeyClass" />
    <element column="my_integer" type="integer" />
    </map>
    И это сработало кроме одной непонятной мне детали: если не сохранять (if not persist) объекты-ключи KeyClass ДО сохранения всего Entity, то вылезет ошибка
    Чтобы убрать ее приходится вручную перед сохранением объекта-держателя Map сохранять объекты-ключи этой Map. Мне непонятно с чем это связано: мне казалось Hibernate всегда автоматом сохраняет все зависимости если я поставил cascade="all".

    Ну ладно, я продолжил и теперь пробую сохранить Map, где ключом является Enum:
    Код (Text):
    <class name="EntityClass">
    (...)
    <map name="myMap" cascade="all">
    <key column="parent_id"/>
    <map-key-many-to-many class="MY_ENUM" />
    <one-to-many class="SomeClass" />
    </map>
    </class>
    <class name="MY_ENUM">
    <id name="id" type="int">
    <generator class="native"/>
    </id>
    <property name="name" type="string" length="32"/>
    </class>
    И это работает, но странность в том что в соотв. таблице SomeClass, там где должен быть индекс в виде id инстанса MY_ENUM содержится вместо этого некий BLOB! Соврешенно неясно откуда он взялся и как побороть.

    Да, я слышал про то что Enums должны мэпиться неким спец-типом, но мне неясно как применить это к моему случаю енума-ключа в Map:
    Код (Text):
    <property name="status" not-null="true">
    <type name="org.hibernate.type.EnumType">
    <param name="enumClass">MY_ENUM</param>
    </type>
    </property>

    ?
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    можешь показать, что за ДБ модель ты пытаешься замапить?
     
Загрузка...

Поделиться этой страницей