Карта денормализованной спящей - PullRequest
1 голос
/ 21 апреля 2010

У меня есть класс Summary, который содержит список качеств. Качество содержит строковое имя и значение типа int. Эти данные хранятся в денормализованной структуре БД, только в одной таблице, для сводки и качества.

Таблица качества:

идентификатор, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3

Для каждой пары имя-значение качества в класс Summary необходимо вставить новый объект Quality.

Как отобразить это в режиме гибернации (xmlnate mapping)?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Неясно, как Quality объекты должны быть "вставлены" в класс держателя Summary, но я думаю, что пользовательский тип пользователя (либо o.h.u.UserType, либо o.h.u.UserCollectionType) - путь сюда.

См. Раздел 5.2.3.Пользовательские типы значений в документации для получения более подробной информации (о сопоставлении особо нечего сказать, просто укажите свой пользовательский тип как type в отображении).

1 голос
/ 22 апреля 2010

Мне удалось это исправить с помощью пользовательской реализации CompositeUserType. Файл отображения выглядит следующим образом:

<property name="qualities" type="com.foo.bar.QualityCompositeUserType">
        <column name="linkName1" />
        <column name="linkQuality1" />
        <column name="linkName2" />
        <column name="linkQuality2" />
        <column name="linkName3" />
        <column name="linkQuality3" />
</property>

ReturnClass в CompositeUserType - это List.class, метод nullSafeSet получает коллекцию в качестве аргумента значения. Это просто вопрос получения значений из списка и назначения их параметрам в подготовленном операторе. (и заполнить нулем, если значения отсутствуют в списке Качеств).

Метод nullSafeGet проще. Я просто создаю новый ArrayList, в который вставляются новые объекты Quality со значениями из набора результатов.

Я могу добавить полный пример, если интересно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...