当前位置: 首页 > 知识库问答 >
问题:

使用postgis和SpringHibernate空间:无法返回空间数据

诸福
2023-03-14

我有这样一个问题:我可以写到一个带有地理类型列的Postgis表,并且数据输入正确。当我试图取回它时,我得到了一个java.lang.IllegalArgumentException:不能转换org.PostgreSQL.util.PGObject类型的对象

我使用的是Hibernate Spatial 4.0M1、PostGIS2.0.2、Postgresql 9.1.7和Spring3.2、PostGIS-jdbc2.0.2,我还尝试了1.5.2和Postgresql-jdbc9.1-901。

这是我课上的相关部分

public class Poi {
@Id
@GeneratedValue(generator="t_pois_poisid_seq")
private long poisid;
@Column(name="name")
private String name;
@Column(name="userid")
private int owner;
//@Column(columnDefinition = "Geometry", name="location")
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;


public Poi(){}

public Poi(String name, int owner, String wktPoint){
    this.name = name;
    this.owner = owner;
    WKTReader fromText = new WKTReader();
    Geometry geom = null;
    try{
        geom = fromText.read(wktPoint);
    }catch(ParseException e){
        throw new RuntimeException("Not a WKT string:" + wktPoint);
    }
    if (!geom.getGeometryType().equals("Point")) {
        throw new RuntimeException("Geometry must be a point. Got a " +  geom.getGeometryType());
    }
    //geom.setSRID(4326);
    this.location = (Point) geom;

}

}

这就是我得到的错误

共有1个答案

盖锦程
2023-03-14

如果有人感兴趣:问题是PostGIS从列类型Geography返回PGObject,而不是PGGeomethy,因此无法转换为PGGeomethy。我使用jdbcTemplate(而不是Hibernate)找到的解决方案是将字段从resultset强制转换为pgobject,然后创建pggeomethy,如下所示:

PGgeometry geo = new PGgeometry(myPGObject.getValue());

执行此操作时,geo.getvalue()返回一个字符串,格式为srid=4326;Point(40.70686417491799-74.01572942733765),这正是我想要的。我可以使用st_astext执行查询,但它会丢失精度。我对Hibernate的了解还不足以提出解决方案,但对于我的用例来说,这已经足够了。

 类似资料:
  • 我是PostGIS的新手,我正在使用带有Hibernate Spatial和Spring框架的PostGIS。问题是主键没有自动设置,在将数据插入数据库时,我收到以下错误: 我已经在MySQL上测试了代码,它工作正常。但是,当使用Hibernate Spatial和PostGIS时,它会给我提到的错误。模型如下: 以下是插入数据的代码: 以下是Maven中的依赖项: 和Hibernate配置: 我

  • 我在尝试通过hibernate spatial postgresql插件使用Grails 2.4.3和PostGIS数据库建立项目时遇到了很多麻烦。这是一个示例项目,除了默认插件外,没有安装其他插件。我首先启用了Postgres,并尝试将域保存到数据库中:一切正常。但一旦我启用hibernate spatial,它就不再工作了。 我和这个人有完全相同的问题。 我试着像他一样排除“hibernate

  • 我正在从GlassFish 4迁移到WildFly8应用程序服务器并收到以下错误: 我使用Hibernate空间和PostGIS。对于Glassfish服务器,我将postgis jar添加到 /lib/ext文件夹以修复该错误。 我按照本教程中的步骤:https://gist.github.com/bjornharrtell/3054462,但它对我不起作用,即我将这些模块添加到 /org/hi

  • 我对JPareSposition进行了本机查询,如: 生成的查询如下所示: 几何图形是表中包含空间数据的列。 但跟踪还表明查询存在解析错误: 但当我在数据库中执行查询时,我得到的结果是正确的。 为什么这个不匹配? 我最终可以通过以下方式解决这个问题:

  • 我引用了irbanana关于支持PostGIS的空间数据类型的回答。我正在使用MySQL,并试图为自定义数据类型实现EWKBGeomPoint。 我的Gorm模型: 据我所知,MySQL支持这样的插入: 或 如果我使用自己的来满足的界面: 包括在内的整个值在Gorm的单引号中引用,因此它不起作用: 我如何让它工作? 编辑1: 我追踪Gorm代码,最终得到了的函数。在它内部检查且为真,则它进入调用,

  • 我试着写了下面的代码,但不明白为什么它在spl_autoload_register()中找不到具有名称空间的类? 我得到的错误是: 警告:require_once(src/test\stringhelper.php):无法打开流:没有这样的文件或目录 autoloader.php文件: src文件夹中的stringhelper.php: 我也在使用XAMPP,如果这有区别的话。