Функция srid(геометрии) не существует: спящий режим Java

Я возвращаюсь к старому проекту, над которым кто-то в моем университете работал. В основном это управление базой данных географических данных (которое выполняется в psql и с использованием postgis 1.5 и 2.0), а также некоторые модификации и графический интерфейс, выполненный в java netbeans. Для интерфейса между этими двумя используются Maven и Hibernate.

Дело в том, что когда я пытаюсь запустить приложение, которое должно работать, я получаю эти ошибки

SEVERE: ERROR: no existe la función srid(geometry)
Exception in thread "AWT-EventQueue-0" org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:174)
    at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1163)
    at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:334)
    at testdb.ui.NetworkClustering.updateOLTdistance(NetworkClustering.java:609)
    at testdb.ui.MetroClustering.setMetroOltDist(MetroClustering.java:118)
    at testdb.ui.MetroClustering.clusterData(MetroClustering.java:38)
    at com.kipouridis.thesis.GUI.MetroDialog.jButton1ActionPerformed(MetroDialog.java:102)
    at com.kipouridis.thesis.GUI.MetroDialog.access$100(MetroDialog.java:19)
    at com.kipouridis.thesis.GUI.MetroDialog$2.actionPerformed(MetroDialog.java:56)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
    at java.awt.Dialog.show(Dialog.java:1082)
    at java.awt.Component.show(Component.java:1651)
    at java.awt.Component.setVisible(Component.java:1603)
    at java.awt.Window.setVisible(Window.java:1014)
    at java.awt.Dialog.setVisible(Dialog.java:1005)
    at com.kipouridis.thesis.GUI.ONUAdmin.calcDistQueryButtonActionPerformed(ONUAdmin.java:219)
    at com.kipouridis.thesis.GUI.ONUAdmin.access$100(ONUAdmin.java:44)
    at com.kipouridis.thesis.GUI.ONUAdmin$2.actionPerformed(ONUAdmin.java:94)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Достигнув точки останова, я обнаружил, что ошибка появляется при достижении одного обновления БД, следуя этой строке:

result = oltDistQ.executeUpdate();

и запрос о том, что он применяется в oltDistQ, следующий:

String oltDistQuery = "update connections set oltdist = (select result.distance from "
                + "(select sum( st_length(st_transform(the_geom,2163))) as distance "
                + "from dijkstra_sp_delta('ways' , ( select onu.source from onu where onu.gid = connections.gid  )"
                + " ,    (select rn.source from onu as rn where rn.gid = "
                + "(select olt_id from metro_nets where net_id = connections.metro_net )  ),0.01)) as result   ) "
                + "where metro_net = " + 0;

Я проверил БД, и все столбцы кажутся существующими, и, насколько я вижу, функция srid(геометрия) не указана в этом запросе. Я знаю, что эта функция была обновлена, и теперь она имеет вид st_srid(geometry), но я не могу найти, где эта функция вызывается или где я могу проверить ее.

Я проверил java-файлы, и кажется, что ни одна из них не использует эту функцию в обновлении запроса, а для БД, если бы функция вызывалась и psql не распознал ее, таблицы не могли быть созданным; но они созданы и имеют нужные данные.

Существует несколько кодов строк (и файлов кодов), которых я не очень глубоко знаю, поскольку я сказал, что это не мой собственный проект. Но я теряю надежду здесь, так как я не знаю, где проверить, чтобы решить эту ошибку.

Пожалуйста, если кто-то что-то знает, это было бы очень полезно.

Заранее спасибо!

1 ответ

Оригинальные функции были названы, например, srid(geometry), но они были позже переименованы с ST_ префикс (т. е. тип пати). Чтобы использовать первоначально названные функции, найдите скрипт enabler, который поставляется вместе с вашей установкой PostGIS с именем legacy.sql (также legacy_minimal.sql может работать, но я не знаю). Это обеспечит устаревшие функции для вашей базы данных, которые ожидаются более старыми клиентами.

Используйте их так:

psql -d [yourdatabase] -v ON_ERROR_STOP=1 -f legacy.sql
Другие вопросы по тегам