0

我需要select ST_AsText(column_name)使用 hibernate 从表中执行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

我在这里想念什么?

4

3 回答 3

0

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

Query query = session.createSQLQuery("select ST_AsText(\"END2536\") from country   where        object='something'");
于 2013-07-16T07:51:44.260 回答
0

错误信息很清楚 - 说

在此 ResultSet 中找不到列名 END2536。

因此,如果您说它在客户端中工作,那么 Hibernate 似乎会以某种方式更改查询。

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

于 2013-07-16T07:47:11.750 回答
0

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

于 2013-07-17T05:11:22.017 回答