【发布时间】:2013-02-07 12:41:48
【问题描述】:
我将 ormlite 与 jdbc 连接到一个 postgresql 数据库。我的数据结构是预定义的,包含一个称为几何的 Postgis 数据类型。此数据类型可以包含 GIS 应用程序的不同几何结构(点、线串、多边形……)。原生 Postgis 可以将此数据类型转换为 geoJson 或任何其他字符串类型的 gis 相关格式。
当我直接将 ormLite 与 Postgis(作为字符串)一起使用时,它给了我一个二进制格式。所以我想使用 postgis 函数将此二进制格式转换为例如geoJson,KML。
在 SQL 中是这样的:
select ST_AsGeoJson(geometrycolumn) from table;
或
update table set geometrycolumn = ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-5.5,7.2]}')
在模型中,此几何列应作为字符串访问(读/写)。
我尝试使用 ormlite 持久化器,但为时已晚。此时,使用持久化器(通过resultToSqlArg 或parseDefaultString),查询已发送到数据库,我无法编辑从 postgres 请求的列。 Mrog 有一个 solution 用于解决与此相关但也使用持久性的问题。
我也尝试用 jdbc 覆盖特定的类。但不知道如何“注入” sql-functions。
或者我可以使用原始 SQL 查询。但是我需要使用表中的许多其他属性。而且我必须对数据库使用两次查询(一次用于常规属性,一次用于几何列)。而且我的 orm 感觉是不要使用原始的 sql 语句。
另一种解决方案是在数据库端创建一个 geoJson 列。 ormLite 可以从中读取并使用 sql-trigger 将其写入原始列。但这是一个糟糕的解决方案。
我真的必须创建自定义数据类型并在服务器端进行转换,而不是在数据库上进行吗?或者有没有使用原生数据库功能的解决方案?
【问题讨论】: