Мне нужно сопоставить столбец 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) работу?