2014-02-20 7 views
0

내 대학의 누군가가 작업 중이었던 이전 프로젝트를 다시 시도하고 있습니다. 이것은 주로 지리 데이터의 DB 관리 (psql에서 만들어지고 postgis 1.5와 2.0 사용)와 일부 수정과 java netbeans에서 만들어진 GUI입니다. 이 둘 사이의 인터페이스를 위해 Maven과 hibernate가 사용되고있다.srid (geometry) 함수가 존재하지 않습니다. Java 동면 일

내가 일하게 될 것으로 예상되는 응용 프로그램을 실행하려고 할 때, 나는 브레이크 포인트에 도달이 오류

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) 

를 얻을 거래는, 내가 발견은 하나의 업데이트에 도달했을 때 오류가 나타나는 DB를로,이 줄을 다음

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; 
:

result = oltDistQ.executeUpdate(); 

하고 oltDistQ에 적용되는 쿼리 다음이다

DB를 검사하고 모든 열이 존재하는 것으로 보았고, 내가 볼 수있는 한 srid (geometry) 함수가 해당 쿼리에 명시되지 않았습니다. 이 함수가 업데이트되었고 이제는 st_srid(geometry)으로 명시되어 있지만이 함수가 호출되는 곳 또는 찾을 수있는 곳을 찾을 수 없습니다.

자바 파일을 검사 한 결과 쿼리 업데이트 내에서 해당 함수가 사용되지 않고 DB에 대해 함수가 호출되고 psql이이를 인식하지 못하면 테이블 창조 될 수 없었다; 그러나 그들은 창조되고 원하는 데이터를 가지고있다.

나는 내 자신의 프로젝트가 아니라고 말하면서 깊이 알지 못하는 라인 코드 (및 코드 파일)가 몇 가지 있습니다. 그러나 나는이 오류를 해결하기 위해 어디에서 점검해야할지 모르겠으므로 여기서 희망을 잃고 있습니다.

누군가가 뭔가를 알고 있다면, 정말 도움이 될 것입니다. 사전에

감사합니다!

답변

1

원래 함수의 이름은 다음과 같습니다. srid(geometry)이지만, 나중에 ST_ 접두사 (즉, s pat t ype)로 바뀌 었습니다. 원래 명명 된 함수를 사용하려면 legacy.sql이라는 PostGIS 설치와 함께 제공되는 작동 스크립트를 찾으십시오 (legacy_minimal.sql도 작동 할 수 있지만 잘 모르겠습니다). 이들은 이전 클라이언트가 예상하는 레거시 기능을 데이터베이스에 제공합니다.

이처럼 그들을 사용

psql -d [yourdatabase] -v ON_ERROR_STOP=1 -f legacy.sql 
+0

안녕 마이크를! 대답 해줘서 고마워. 진심으로 나는 SQL에서 많은 일을하지 않았으므로 제안한 쿼리 (legacy.sql)를 실행하려고했습니다. 나는 postgis 메인 페이지에서 다운로드 할 수 있도록 메인 폴더에 없었습니다. 것은 이미 spatial_ref_sys 테이블을 가지고 있고 쿼리를 실행할 때 중복 된 키를 얻습니다. 첫 번째 줄은 다음과 같습니다. INSERT INTO "spatial_ref_sys"("srid", "auth_name", "auth_srid", "srtext", "proj4text") VALUES (4326, 'E ... 그때에 나는 오류를 계속 받았다 .Fe 나는 function addgeometry가 유일하지 않다는 것을 알게되었다. 그래서 내가 계속 해야할지 모르겠다. –

+0

당신도 시도 할 수있는'legacy_minimal.sql' 파일이있다. 버전에 따라 PostGIS 버전이 함께 제공됩니다. –

+0

팁 덕분에 저에게 도움이되었습니다. – rozap