Карта денормализованная гибернация
-
30-09-2019 - |
Вопрос
У меня есть сводный класс, который содержит список качеств. Качество содержит строковое имя и значение int. Эти данные хранятся в денормализованной структуре БД, только в одной таблице, так и для резюме, так и для качества.
Качественный стол:
ID, AnmyFieds, QualityName1, QualityValue1, QualityName2, QualityValue2, QualityName3, QualityValue3
Для каждого имени качества и пары значений нового качества необходимо вставить в суммированные класс.
Как набрать это в Hibernate (сопоставление XML Hibernate)?
Решение
Не ясно, как Quality
Объекты должны быть «вставлены» в Summary
класс держателя, но я думаю, что пользовательский тип пользователя (либо o.h.u.UserType
или o.h.u.UserCollectionType
) Это путь, чтобы пойти сюда.
Обратитесь к разделу 5.2.3. Пользовательские типы значений В документации для более подробной информации (нельзя сказать о сопоставлении, просто укажите ваш пользовательский тип пользователя как type
в картографии).
Другие советы
Мне удалось исправить это с помощью пользовательской реализации 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>
ReturnedClass в CompositeUsertype является List.Class, метод Nullsafeset получает коллекцию в качестве значенного аргумента. Это просто вопрос получения значений из списка и назначить их параметрам в подготовленном операторе. (и заполните NULL, если значения отсутствуют в списке качеств).
Метод Nullsafegeget проходит в течение Я просто создаю новый ArrayList, в котором новые объекты качества вставляются со значениями из результатов.
Я могу добавить полный пример, если интересно.