在公司用 Hibernate 的时候,功能需要得用 sql 语句而不是 hql,还得转换成 Vo 而不是实体,但是发现了一个问题,就是org.hibernate.exception.SQLGrammarException: could not execute query。回家后自己又写了个简单代码试验了一下,结果还是有问题,大家帮小弟瞧瞧是咋回事,焦头烂额了我的实验代码(贴个关键部分):
String sql = "select news_id as id,news_title as title,news_content as content,news_author as author from news;";
List list = session.createSQLQuery(sql)
.setResultTransformer(Transformers.aliasToBean(NewsVo.class))
.list();
其中 NewsVo 这个已经创建好了,如下
private String title;
private String content;
private String author;
/* getter 和 setter */
sql语句也在MySQL数据库中试验好了没问题,我又把 sql 语句换成 hql 语句试了试,也可以查出来,但是就是这个 sql 不行,错误信息如下:
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)
…………
Caused by: java.sql.SQLException: Column 'news_id' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851)
…………
网上查了很多类似的,都没解决,大家给小弟看看,感激不尽啊!!!
HibernateSQLJava
String sql = "select news_id as id,news_title as title,news_content as content,news_author as author from news;";
List list = session.createSQLQuery(sql)
.setResultTransformer(Transformers.aliasToBean(NewsVo.class))
.list();
其中 NewsVo 这个已经创建好了,如下
private String title;
private String content;
private String author;
/* getter 和 setter */
sql语句也在MySQL数据库中试验好了没问题,我又把 sql 语句换成 hql 语句试了试,也可以查出来,但是就是这个 sql 不行,错误信息如下:
org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)
…………
Caused by: java.sql.SQLException: Column 'news_id' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851)
…………
网上查了很多类似的,都没解决,大家给小弟看看,感激不尽啊!!!
HibernateSQLJava
List<Clazz> clazzs = (List<Clazz>) session.createSQLQuery(sql)
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(Clazz.class)).list();
我是Select A as B ,A as C,D as E,因为有重复的A,只要加上as,hibernate就报这错。。
抱大腿!!虽然不知什么原理,以前可以,现在不行。但是万分感谢!