hiberanete版本3.6.0和3.6.1都试了,效果一样。
mysql版本5.0两个sql都有个特征,就是字段名称name出现了两次。
sql语句1:
SELECT a.NAME,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
使用jdbc直接查询,结果正确。
使用hibernate的getSession().createQuery(sql)查询,不报错,但结果不正确,结果中的两列的值都试a.NAME的值。sql语句2:
SELECT a.NAME ddddd,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
使用jdbc直接查询,结果正确。
使用jdbc直接查询,结果正确。
使用hibernate的getSession().createQuery(sql)查询,报错,错误如下:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:255)
at JpaTest.main(JpaTest.java:12)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2536)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
... 1 more
Caused by: java.sql.SQLException: Column 'name' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1136)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5531)
请知道的朋友帮忙解决,非常感谢。
mysql版本5.0两个sql都有个特征,就是字段名称name出现了两次。
sql语句1:
SELECT a.NAME,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
使用jdbc直接查询,结果正确。
使用hibernate的getSession().createQuery(sql)查询,不报错,但结果不正确,结果中的两列的值都试a.NAME的值。sql语句2:
SELECT a.NAME ddddd,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
使用jdbc直接查询,结果正确。
使用jdbc直接查询,结果正确。
使用hibernate的getSession().createQuery(sql)查询,报错,错误如下:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:255)
at JpaTest.main(JpaTest.java:12)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2536)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
... 1 more
Caused by: java.sql.SQLException: Column 'name' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1136)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5531)
请知道的朋友帮忙解决,非常感谢。
解决方案 »
- jdk版本问题(请解决过的人帮我分析下)..myeclipse与tomcat使用的jdk引发的问题
- ssh框架连接数据库出现问题,新手求解决
- Ext.get('..').dom为空或不是对象
- java.net.UnknownHostException和javax.mail.MessagingException的问题
- 单表操作是否应当加事务控制?
- plugin谁做过吗?
- 如何在Jbuilder 中设置ejb的 jndi
- 大侠指点一下大方向
- 请问一个系统的部分模块是否可以使用struts?
- 在jbuilder6已经编译了CalculatorImpl_Stub,为什么还有下面的异常?
- 求救hibernate懒加载
- 有人做过客服系统吗?在web页面点击一个浮动窗体,然后进入与客服对话的页面
使用JPA2.0进行查询,和上述效果一样。
String sql = "SELECT a.NAME ddddd,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id";
EntityManager em = Persistence.createEntityManagerFactory("xxxxx").createEntityManager();
Query query = em.createNativeQuery(sql);
List list = query.getResultList();
System.out.println(list);
em.close();
createQuery 执行的是HQL
我实际用的就是createSQLQuery,不是createQuery,但是出现了上面的情形。
你的2个表中的字段是否叫name?
查询结果正确SELECT a.id,ec.name FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
查询结果正确SELECT a.id,a.name,ec.name FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
查询不报错,但结果中两个name的值都是a.name的值。上一条sql语句加上别名
SELECT a.id,a.name ggggg,ec.name FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
查询不报错,但结果中两个name的值都是ec.name的值。颠倒一下两个name的顺序,结果变化了:
SELECT a.id,ec.name,a.name FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
查询不报错,但结果中两个name的值都是ec.name的值。上一条加上别名,查询结果又变了。
SELECT a.id,ec.name fffff,a.name FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
查询不报错,但结果中两个name的值都是a.name的值。两个都加别名
SELECT a.id,ec.name fffff,a.name ggggg FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id
报错了,说“Column 'NAME' not found”。
createSQLQuery查询,如果结果集字段名和映射文件的字段名相同的
那联合多表查询的时候会有问题
查询的时候用.addEntity()方法将表的别名和实体类联系起来就可以了
具体操作可以参考
http://www.360doc.com/content/10/1018/18/1947337_62026750.shtml
我也没空了。
先结了。
感觉luman2002说的有道理。