Ошибка вставки Geoserver WFS-T (ORA-22816) при использовании слоев на основе представлений базы данных и с порядковой нумерацией для идентификаторов - PullRequest
0 голосов
/ 12 июня 2018

Мы работаем над приложением Frontend, которое добавляет новые данные в слои GeoServer.Интерфейс использует вызовы WFS-T Insert для добавления этих данных.Мы используем представления для этих слоев в GeoServer для дополнительной обработки.Представления, которые мы используем, являются представлениями базы данных, созданными таким образом в нашей базе данных Oracle (например, мы не используем представления SQL GeoServer).Эти слои, основанные на представлениях, работают нормально (решение применяется с отключенным «первичным ключом» для представления, как описано в другом месте в Интернете).

Используемые представления содержат уникальный идентификатор, который является уникальным идентификатором объекта.«Основная» таблица, которая используется в представлении.Для уникального создания идентификаторов для «основной» таблицы мы выбрали создание этого идентификатора в последовательности, определенной в Oracle.Для использования этой последовательности в GeoServer вы можете предоставить эти «метаданные», как указано в документации: http://docs.geoserver.org/stable/en/user/data/database/primarykey.html

Это решение прекрасно работает, кроме случаев, когда вы используете (вставку) триггер в представлении базы данных.

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ TRIGGER OUR_VIEW_TRG вместо вставки, обновления или удаления в vw_our_view для каждой строки ...

Если мы выполняем вызов вставки WFS-T, это приводит к следующему исключению:

org.geoserver.wfs.WFSTransactionException: Ошибка при выполнении вставки: Ошибка при вставке функций Ошибка при выполнении вставки: Ошибка при вставке функций Ошибка при вставке функций ORA-22816: неподдерживаемая функция с предложением RETURNING

Не указывая GeoServer на использование последовательности, мы получаем идентификатор объекта, который не будет соответствовать нашей нумерации последовательности на идентификаторе таблицы (GeoServer просто возвращает количество строк таблицы плюс одну).Это приводит к нежелательной ситуации, когда у нас появляется неверный идентификатор во внешнем интерфейсе после вставки WFS-T, только после обновления браузера выбирается правильный идентификатор.

Кто-нибудь знает, есть ли способчтобы заставить это работать, например, для нашего клиента, изменившего код GeoServer самостоятельно, и таким образом создать нашу «собственную» версию GeoServer не вариант.Прекращение использования представлений подразумевает дополнительные вызовы вставки WFS-T из нашего приложения FrontEnd.

...