登录  /  注册
hibernte+mysql纯sql查询问题
php中文网
发布: 2016-06-07 15:46:29
原创
613人浏览过

以下代码始终报错: /** * 获得换车动态 * @return */public ListObject[] getTransDynamic(){Object result = super.commonDao.execute(new IHibernateCallback() {public Object doInHibernate(Session session) {String sql =select +(select ms.nickname

以下代码始终报错:

/**
	 * 获得换车动态
	 * @return
	 */
	public List getTransDynamic(){
		Object result = super.commonDao.execute(new IHibernateCallback() {
			
			public Object doInHibernate(Session session) {
				String sql =
							"select "+
							"(select ms.nickname from Memberstatus as ms where ms.MemberId=t.FPMemberId) as fpname, "+
							"(select ms.nickname from Memberstatus as ms where ms.MemberId=t.SPMemberId)  as spname, "+
							"(case t.Status "+
							"	when '1' then '正在换车' "+
							"	when '2' then '换车完成' "+
							"end) as st, "+
							"t.StartTime, "+
							"t.`FPMemberId` as fpid, "+
							"t.`SPMemberId` as spid "+
							"from `Transfer` as t "+
							"where t.Status in ('1','2') and t.EndTime<=sysdate() "+
							"order by t.StartTime "+
							"limit 0,7 ";
				
				return session.createSQLQuery(sql).list();
			}
		});
		return result==null?null:(List)result;
	}
登录后复制


错误信息如下:

root cause

java.sql.SQLException: Column 'FPMemberId' not found.
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
	com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1093)
	com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
	com.mchange.v2.c3p0.impl.NewProxyResultSet.getString(NewProxyResultSet.java:3342)
	org.hibernate.type.StringType.get(StringType.java:18)
	org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
	org.hibernate.type.NullableType.nullSafeGet(NullableType.java:189)
	org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:474)
	org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:420)
	org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:317)
	org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606)
	org.hibernate.loader.Loader.doQuery(Loader.java:701)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	org.hibernate.loader.Loader.doList(Loader.java:2217)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2108)
	org.hibernate.loader.Loader.list(Loader.java:2103)
	org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
	org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1696)
	org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
	org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
	com.cdaccp.hc.biz.impl.TransferInfoService$5.doInHibernate(TransferInfoService.java:386)
	com.jiang.foundation.dao.CommonDao$1.doInHibernate(CommonDao.java:562)
	org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
	org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
	com.jiang.foundation.dao.CommonDao.execute(CommonDao.java:558)
	com.cdaccp.hc.biz.impl.TransferInfoService.getTransDynamic(TransferInfoService.java:367)
登录后复制

观察控制台的输出:

Hibernate:
select
(select
ms.nickname
from
Memberstatus as ms
where
ms.MemberId=t.FPMemberId) as fpname,
(select
ms.nickname
from
Memberstatus as ms
where
ms.MemberId=t.SPMemberId) as spname,
(case t.Status
when '1' then '正在换车'
when '2' then '换车完成'
end) as st,
t.StartTime,
t.`FPMemberId` as fpid,
t.`SPMemberId` as spid
from
`Transfer` as t
where
t.Status in (
'1','2'
)
and t.EndTime<=sysdate()
order by
t.StartTime limit 0,
7
2013-59-03 10:59:26could not read column value from result set: FPMemberId; Column 'FPMemberId' not found.
2013-59-03 10:59:26SQL Error: 0, SQLState: S0022
2013-59-03 10:59:26Column 'FPMemberId' not found.

将以上sql粘贴到mysql工具中执行完全没有任何问题,这就怪了。

最后折腾处理如下:

select * from (原来的查询sql) as 别名

最后行了!

完整如下:

/**
	 * 获得换车动态
	 * @return
	 */
	public List getTransDynamic(){
		Object result = super.commonDao.execute(new IHibernateCallback() {
			
			public Object doInHibernate(Session session) {
				String sql ="select * from (" +
							"select "+
							"(select ms.nickname from Memberstatus as ms where ms.MemberId=t.FPMemberId) as fpname, "+
							"(select ms.nickname from Memberstatus as ms where ms.MemberId=t.SPMemberId)  as spname, "+
							"(case t.Status "+
							"	when '1' then '正在换车' "+
							"	when '2' then '换车完成' "+
							"end) as st, "+
							"t.StartTime, "+
							"t.`FPMemberId` as fpid, "+
							"t.`SPMemberId` as spid "+
							"from `Transfer` as t "+
							"where t.Status in ('1','2') and t.EndTime<=sysdate() "+
							"order by t.StartTime "+
							"limit 0,7 "+
							") as model";
				
				return session.createSQLQuery(sql).list();
			}
		});
		return result==null?null:(List)result;
	}
登录后复制


来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学