问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate sql怎么使用别名

发布网友 发布时间:2022-04-07 18:05

我来回答

1个回答

热心网友 时间:2022-04-07 19:34

项目环境:hibernate3.6.1 mysql5.7.3 驱动:mysql-connector-java-5.1.26
问题描述:项目是从一个sqlserver 数据库翻转到mysql数据库上的。通过sql查询,自动映射到对象上,但是总是报错。奇怪的问题:sql打印出来放到数据库客户端上
可以正常执行结果。但是sql就是查询不出来,报 Column 'account' not found. 这样的错。换过驱动,想过框架的调用方式,查询资料的时候,发现有人
说用query.addEntity("","").list() 可以解决问题,未做验证。因为不想花大力气从框架上变动。用驱动源码跟踪,发现原来,驱动根本就不识别别名。在查询
`userAccount`对应的值的时候,传到驱动的columnName 竟然是 “account”,这也是很多人在网上说的,如果sqlQuey 遇到两个表有同一个属性名,查询会
报错的bug的原因所在!

代码部分:

[java] view plain copy
SQLQuery query = createSQLQuery(orderSql, values);
long totalCount = countSqlResult(sql, values);
page.setTotalItems(totalCount);
setPageParameterToSqlQuery(query, page);
List result = query.setResultTransformer(Transformers.aliasToBean(cl)).list();
page.setResult(result);

平台输出:

[sql] view plain copy
select
l.id,
userId,
u.account as `userAccount`,
ip,
ipAddr,
loginTime
from
t_loginlog l
left join
t_user u
on l.userId = u.id
where
1=1 limit ?

[java] view plain copy
[2015-01-30 14:27:29,031][ERROR][http-8080-1] (JDBCExceptionReporter.java:234) - Column 'account' not found.
2015-1-30 14:27:29 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet ishare threw exception
java.sql.SQLException: Column 'account' 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:1171)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5737)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:505)
at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:451)
at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:348)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
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 com.coolsoul.framework.orm.hibernate.HibernateDao.findSqlPage(HibernateDao.java:90)
at com.coolsoul.ishare.loginLog.service.LoginLogService.findPageList(LoginLogService.java:54)
at com.coolsoul.ishare.loginLog.service.LoginLogService
FastClassByCGLIB
fb9ca761.invoke(<generated>)

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.coolsoul.ishare.loginLog.service.LoginLogService
EnhancerByCGLIB
5ea6d36b.findPageList(<generated>)

at com.coolsoul.ishare.loginLog.controller.LoginLogController.queryList(LoginLogController.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:662)

解救方法:
困扰了我很久 ,找了很多资料,问题很简单,就是驱动不支持别名的问题,这里记录下,为后来人造桥!!! 在连接mysql数据库的时候添加 useOldAliasMetadataBehavior=true 这个参数!!!!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 GALGAME初雪樱花与天神漫乱是同一个公司的作品么? 千克和克的物品有哪些? 如何在WPS自动将每一行都排满 Wps中EXCL一列文字怎么按顺序变成一排 说一下柚子社有哪些游戏作品吧 WPS里面排菜谱,怎么让所有文字排列整齐啊`急! 小儿支气管肺炎.挂头孢和沐舒坦,请问一般要多久能 wps字挤在一起 6岁儿童支气管炎输了4天的液晚上睡觉不咳嗽白天还是咳嗽有痰有流鼻涕我开了中药她还需要输液吗 如何把复制的文字在WPS上紧密排列(复制来的是分行的我嫌麻烦不想手动) 小儿支气管肺炎,需要住院吗? 小儿支气管肺炎,白天不可不喘,精神状态好,但晚上咳嗽加重,流鼻涕,这样需要输液吗? 证卷账户怎么开 医生支气管肺炎一定要输液吗 小儿肺炎一定要输液治疗吗?为什么这么说? wps文字挤在一起 北京冬奥闭幕式,你对开闭幕哪个环节最满意? oppo手机怎么解密码 honor怎么解锁密码? 北京冬奥会闭幕式有哪些精彩瞬间?哪个环节给你留下了最深的印象?_百度... 有那些孕妇游戏(换装、……) 漂亮妈咪换装小游戏,哪里有?我要把妈妈打扮成世上最漂亮的人了! 养成可以怀孕的游戏是什么? 谁知道妈妈换装的小游戏? 以前在电脑上去玩过一款妈妈怀孕养成游戏 每选一个健康值什么的都会增加或减少 求这个游戏名字 娜娜假期自由模式怎么怀孕 换装游戏哪个好玩? 衣服超多的换装游戏有哪些? 有哪些换装游戏 一个微信可以同时登录两个吗? 一个微信可以登两个吗 I社有没有可以怀孕的游戏 微信可以登录两个吗 用思图糯米胶怎么贴墙纸?具体步骤哪位来说一下,准备自己贴背景墙 一个人可以实名两个吗? 嘉力丰糯米胶怎么样,要怎么使用呢? 微信可以用两个号码吗? 一个人可以有两个? 同一个人可以建两个吗?怎么弄? 晚上十点以后代驾60公里需要多少钱?