Geoserver WFS-T在使用基于数据库视图的图层时插入错误(ORA-22816)。用于ID的序列编号

时间:2018-06-12 08:36:56

标签: oracle11g geoserver

我们正在开发一个前端应用程序,它将新数据添加到GeoServer层。前端使用WFS-T插入调用来添加此数据。我们在GeoServer中为这些图层使用视图,以进行一些额外的处理。我们使用的视图是在我们的Oracle数据库本身上创建的数据库视图(例如,我们不使用GeoServer的SQL视图)。这些基于视图的图层工作得很好(解决方案应用于视图的禁用“主键”,如互联网上其他地方所述)。

我们使用的视图包含一个唯一的ID,它是视图中使用的“principal”表的唯一ID。对于“主”表的ID的唯一创建,我们选择通过Oracle中定义的序列来创建此ID。要在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:不支持的功能   退回条款

如果没有指示GeoServer使用该序列,我们会返回一个功能ID,它与我们对表的ID的序列编号不对应(GeoServer只返回表的行数加一)。这导致了一个不希望出现的情况,即在WFS-T插入后我们在前端有一个不正确的ID,只有在浏览器刷新后才能获取正确的ID。

是否有人知道是否有办法使这项工作,例如对于我们的客户自己更改GeoServer代码,因此创建我们的“自己的”GeoServer版本是没有选择的。停止使用视图意味着我们的FrontEnd应用程序会进行额外的WFS-T插入调用。

0 个答案:

没有答案