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

如何使用Hibernate和PostGIS从这个几何对象中获取字符串

夹谷星剑
2023-03-14

我想返回此SQL Postgis查询的输出(几何类型中的输出为“0101000000000000000002440000000000002440”)

select ST_GeometryFromText('POINT(10 10)',4326)

用Java和hibernate。

我尝试了以下方法:

public String computeGeomFromLongitudeLatitude() {
    Session session = getSession();
    String geom = (String) session
            .createSQLQuery(
                    "select ST_GeometryFromText('POINT(10 10)',4326)").list().get(0);
    closeSession();

    return geom;
}

这对我不起作用。我得到以下异常

Exception in thread "main" org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:76)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:99)
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:563)
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:660)
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:564)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:580)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1986)
    at org.hibernate.loader.Loader.doQuery(Loader.java:829)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
    at org.hibernate.loader.Loader.doList(Loader.java:2463)
    at org.hibernate.loader.Loader.doList(Loader.java:2449)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279)
    at org.hibernate.loader.Loader.list(Loader.java:2274)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1585)
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:224)
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)
    at database.BerlinPolygonDAO.computeGeomFromLongitudeLatitude(BerlinPolygonDAO.java:305)
    at database.BerlinPolygonDAO.main(BerlinPolygonDAO.java:330)

我想我明白问题是什么。我尝试将结果解析为字符串,但它是几何对象。但是我该怎么做才能在 Java 中将此输出作为字符串获取?如果我只在 SQL 查询后面添加 .list(),我已经得到了一个异常。

非常感谢您的想法。

编辑:

我在Hibernate中指定了正确的对话框.cfg

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/GIS</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">mysql15</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.hbm2ddl.auto">create</property>
        <property name="hibernate.show_sql">false</property>

        <mapping class="database.tables.flickr.User" />
        <mapping class="database.tables.flickr.Photo" />
        <mapping class="database.tables.flickr.Tag" />
        <mapping class="database.tables.OwnPolygon" />
    </session-factory>
</hibernate-configuration>

共有1个答案

杜曜灿
2023-03-14

我检查了一些相关的问题,在这里我找到了答案的灵感。

我以这种方式更改了我的方法,现在它可以工作

public String computeGeomFromLongitudeLatitude() {
    Session session = getSession();
    SQLQuery q =  session
            .createSQLQuery(
                    "select ST_GeometryFromText('POINT(10 10)',4326) as geom");
    q.addScalar("geom", StringType.INSTANCE); 
    String result = (String) q.list().get(0);

    closeSession();

    return result;
}
 类似资料:
  • 我正在做一个项目,在那里用户可以写其他用户的邮件。邮件类当前如下所示: 现在,问题是,我需要将所有邮件保存到. yml用户数据文件中。对我来说,最简单的方法是首先将每封邮件转换为字符串,然后将所有邮件保存到

  • 问题内容: 我得到的输出为 控制器中的日期Mon Dec 31 IST 2012 请提出一种以格式输出日期的方法。需要以日期格式而不是字符串形式输出,以便将输出存储在mysql db的字段中 问题答案: 声明后 您有一个对象, 可以将其按原样存储在mysql DB中 (列类型:datetime)。 但是,在打印时,它默认为实现。我认为您希望获得类似Date @的输出,但是toString以用户可读

  • 我需要得到这个json字符串的Works数组: 我试试这个: 但是不要让任何人。。怎么了? PD:Work是一个具有价格、代码和名称值的类。

  • 问题内容: 我正在尝试在非Spring代码中获取Spring定义的Hibernate Configuration和SessionFactory对象。以下是我的applicationContext.xml文件中的定义: 码: 如果现在调用getBean(“ sessionFactory”),我将返回一个$ Proxy0对象,该对象似乎是Hibernate SessionFactory对象的代理。但这

  • 问题内容: 我不知道如何从字符串中获取Unicode字符。例如,如果字符串是“你好”,我如何获得第一个字符“你”? 从另一个地方我得到一种方法: 确实有效。但是我仍然有一些问题: 还有另一种方法吗? 为什么在Go中不能从字符串中获取Unicode字符,却可以获取字节数据? 问题答案: 首先,您可能需要阅读https://blog.golang.org/strings 。它将回答您的部分问题。 Go

  • 问题内容: 如何使用php从字符串中获取前5个字符 结果应该是这样的 问题答案: 对于单字节字符串(例如US-ASCII,ISO8859系列等),请使用;对于多字节字符串(例如UTF-8,UTF-16等),请使用: