Мне нужно сопоставить столбец Oracle XMLType с гибернацией класса сущности. Существует рабочее (и я думаю, хорошо известное) решение, которое включает в себя реализацию UserType
; однако я не могу использовать его, потому что требует импорта синтаксических анализаторов Oracle xml, что, в свою очередь, вызывает множество проблем.
Я в порядке с доступом к значению столбца xml в виде строки и оставил преобразование в код, который управляет сущностью, но я не могу найти способ прочитать значение и записать его в базу данных. То, что я пробовал до сих пор:
- Объявление свойства в классе сущности как
String
. Результат - значение считывается какnull
. Если свойство простоSerializable
, я получаю исключение "не deserialize". - Использование аннотации
@Formula
(CAST xmlCol as varchar2(1000)
). Результат - значение не сохраняется - Используя
@Loader
и положивCAST
вSELECT
. Это была самая многообещающая попытка - значение было прочитано и сохранено успешно, но когда дело доходит до загрузки коллекции объектов, которые содержат столбец xml, я получаюnull
(Hibernate не использует sql в@Loader
, если базовая таблицаLEFT JOIN
е изд).
Другим подходом, который, как мне кажется, должен работать, является наличие столбца xml как String
(для записи) плюс поле фиктивного для чтения с помощью @Formula
; однако для меня это выглядит грязным хаком, и я бы предпочел не делать этого, если у меня нет выбора.
Наконец, самое последнее, что я могу сделать, это изменить схему БД (также более того, что 1 вариант, например, триггеры просмотра, изменение типа данных столбца), но для меня это тоже не очень хорошо.
Интересно, пропустил я что-то или, может быть, есть способ сделать (3) работу?