我需要使用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
我在这里缺少什么?
答案 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)不在结果集中。当我评论查询缓存部分时,它工作正常。