在hibernate SQL Query中使用postgis函数

时间:2013-07-15 09:14:24

标签: hibernate postgis

我需要使用hibernate select ST_AsText(column_name)从表中执行createSQlQuery()

当我执行该查询时,它显示在结果集中找不到列名。
但是,当我在PGAdmin浏览器中执行相同的查询时,查询可以正常工作。

Query query = session.createSQLQuery("select ST_AsText(END2536) from country   where        object='something'");
((SQLQuery) query).addScalar(column, Hibernate.STRING);
String geomValue = (String) query.uniqueResult();
query.setCacheable(true);
query.setCacheRegion("query.CommonManagement");

错误消息:

16:56:27,076 INFO  [org.hibernate.type.StringType] (http--172.20.211.235-8080-1) could not read column value from result set: END2536; The column name END2536 was not found in this ResultSet.
16:56:27,077 WARN  [org.hibernate.util.JDBCExceptionReporter] (http--172.20.211.235-8080-1) SQL Error: 0, SQLState: 42703
16:56:27,077 ERROR [org.hibernate.util.JDBCExceptionReporter] (http--172.20.211.235-8080-1) The column name END2536 was not found in this ResultSet.
16:56:27,080 ERROR [stderr] (http--172.20.211.235-8080-1) org.hibernate.exception.SQLGrammarException: could not execute query

我在这里缺少什么?

3 个答案:

答案 0 :(得分:0)

错误信息非常清楚 - 说

  

在此ResultSet中找不到列名END2536。

因此,如果你说它在客户端工作,似乎Hibernate以某种方式改变了查询。

按照here所述启用SQL查询日志记录,并检查Hibernate发送的内容。

答案 1 :(得分:0)

您需要添加其他引号,因为您使用大写字母作为列名。

Query query = session.createSQLQuery("select ST_AsText(\"END2536\") from country   where        object='something'");

答案 2 :(得分:0)

谢谢们。我想出了问题所在。这是因为结果集有一个别名,我启用了查询缓存。因此列名(END2536)不在结果集中。当我评论查询缓存部分时,它工作正常。