hibernte+mysql纯sql查询问题_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1922 | 回复: 0   主题: hibernte+mysql纯sql查询问题        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2015-5-27 9:38:36 | [全部帖] [楼主帖] 楼主

以下代码始终报错:

/**
     * 获得换车动态
     * @return
     */
public List<Object[]> 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<Object[]>)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<Object[]> 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<Object[]>)result;
}


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论