我有一個Spring Roo + Hibernate項目,它從客戶端應用程序獲取JTS知名文本(WKT)字符串輸入,將其轉換爲JTS幾何對象,然後嘗試將其寫入PostGIS數據庫。我有一些問題the JDBC connection and types,但這些似乎已經解決:PostGIS幾何保存:「遇到無效的端標誌值。」
@Column(columnDefinition = "Geometry", nullable = true)
private Geometry centerPoint;
和轉換作用:
Geometry geom = new WKTReader(new GeometryFactory(new PrecisionModel(), 4326)).read(source);
但是現在,當Hibernate試圖以我的幾何對象寫入到數據庫中,我得到一個錯誤:
2012-08-31 21:44:14,096 [tomcat-http--18] ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into land_use (center_point, version, id) values ('<stream of 1152 bytes>', '0', '1') was aborted. Call getNextException to see the cause.
2012-08-31 21:44:14,096 [tomcat-http--18] ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: Invalid endian flag value encountered.
似乎很清楚的是,錯誤與二進制表示,這大概是作爲一個著名的二進制(WKB)產生一些endianness。然而,隨着Hibernate隱藏所有的持久性,我無法確定事情進展到哪個方向。
我幾天來一直在爲這個幾何形狀的東西而戰,而且這些錯誤信息很少,所以有人有什麼好的想法嗎?我可以在某處指定字節序(Hibernate或PostGIS),還是以不同的格式(WKT)存儲?
編輯:我還要提到的是我使用的是最新的一切,這通常似乎是兼容的:
- 春3.1.1,1.2.1袋鼠
- 冬眠3.6。 9
- 休眠空間4.0-M1
- JTS 1.12
- 的PostgreSQL 9.1
- PostGIS的-JDBC 1.5.3(不是最新的,但recommended for hibernate-spatial,從源代碼編譯)
- PostGIS的-JDBC 2.0.1(只是嘗試這樣做,現在,以配合PostgreSQL的,同樣的問題,安裝的版本)
的Hibernate Spatial 4 tutorial表明我做房地產的註釋爲:
@Type(type="org.hibernate.spatial.GeometryType")
private Geometry centerPoint;
...但我這樣做的時候,我得到this other error,其當前的註釋解決。
你好,我按照你的問題與OpenGIS :) 你嘗試做兩次方法'@Type(type =「org.hibernate.spatial.GeometryType」)' 註釋加上JPA註釋'@Column columnDefinition =「Geometry」,nullable = true)'關聯到同一個字段。 – ThierryB
其他館藏有類似[geodb issue n°5](https://github.com/jdeolive/geodb/issues/5)的問題。 我建議你應該嘗試postgis測試套件,以查看你是否遇到同樣的問題。 這看起來像一個endian字符編碼問題,好吧,但有時候事情並不像他們看第一隻眼睛。 您是否嘗試使用getNextException()方法獲取更多信息,或者日誌的第二行是您可以獲得的所有內容? – ThierryB
我發現了下面這些[java hibernate postgis教程](http://www.clever-age.com/veille/blog/postgis-play-framework.html),它建議按照我所說的去做。這是法語,好的,但我可以幫助,如果你需要一個翻譯(我是法語大聲笑)。 在建議的教程中,它簡要地解釋了我在第一條評論中所記錄的每個註釋的作用。看來你需要按照我的建議設置它們。 – ThierryB