我将 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有一个与此相关的问题的解决方案,但也使用了持久化器。
我还尝试用 jdbc 覆盖特定的类。但不知道如何“注入” sql-functions。
或者我可以使用原始 SQL 查询。但是我需要使用表中的许多其他属性。而且我必须对数据库使用两次查询(一次用于常规属性,一次用于几何列)。而且我的感觉是不使用原始的 sql 语句。
另一种解决方案是在数据库端创建一个 geoJson 列。ormLite 可以从中读取并使用 sql-trigger 将其写入原始列。但这是一个糟糕的解决方案。
我真的必须创建一个自定义数据类型并在服务器端进行转换而不是在数据库上进行吗?还是有使用本机数据库功能的解决方案?