`

(转)hibernate sqlQuery mysql别名问题

 
阅读更多

项目环境: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
 
  1.        SQLQuery query = createSQLQuery(orderSql, values);  
  2. long totalCount = countSqlResult(sql, values);  
  3. page.setTotalItems(totalCount);  
  4. setPageParameterToSqlQuery(query, page);  
  5. List result = query.setResultTransformer(Transformers.aliasToBean(cl)).list();  
  6. page.setResult(result);  

 

 

 

平台输出:

 

[sql] view plain copy
 
  1. select  
  2.        l.id,  
  3.        userId,  
  4.        u.account as `userAccount`,  
  5.        ip,  
  6.        ipAddr,  
  7.        loginTime   
  8.    from  
  9.        t_loginlog l   
  10.    left join  
  11.        t_user u   
  12.            on l.userId = u.id   
  13.    where  
  14.        1=1 limit ?  

 

 

 

 

[java] view plain copy
 
  1. [2015-01-30 14:27:29,031][ERROR][http-8080-1] (JDBCExceptionReporter.java:234) - Column 'account' not found.  
  2. 2015-1-30 14:27:29 org.apache.catalina.core.StandardWrapperValve invoke  
  3. 严重: Servlet.service() for servlet ishare threw exception  
  4. java.sql.SQLException: Column 'account' not found.  
  5.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)  
  6.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)  
  7.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)  
  8.     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)  
  9.     at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1171)  
  10.     at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5737)  
  11.     at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)  
  12.     at org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:263)  
  13.     at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$2.doExtract(VarcharTypeDescriptor.java:61)  
  14.     at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)  
  15.     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)  
  16.     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)  
  17.     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)  
  18.     at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:505)  
  19.     at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:451)  
  20.     at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:348)  
  21.     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)  
  22.     at org.hibernate.loader.Loader.doQuery(Loader.java:829)  
  23.     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)  
  24.     at org.hibernate.loader.Loader.doList(Loader.java:2533)  
  25.     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)  
  26.     at org.hibernate.loader.Loader.list(Loader.java:2271)  
  27.     at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)  
  28.     at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)  
  29.     at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)  
  30.     at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)  
  31.     at com.coolsoul.framework.orm.hibernate.HibernateDao.findSqlPage(HibernateDao.java:90)  
  32.     at com.coolsoul.ishare.loginLog.service.LoginLogService.findPageList(LoginLogService.java:54)  
  33.     at com.coolsoul.ishare.loginLog.service.LoginLogService
    FastClassByCGLIB
    fb9ca761.invoke(<generated>)  
  34.     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)  
  35.     at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)  
  36.     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)  
  37.     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)  
  38.     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)  
  39.     at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)  
  40.     at com.coolsoul.ishare.loginLog.service.LoginLogService
    EnhancerByCGLIB
    5ea6d36b.findPageList(<generated>)  
  41.     at com.coolsoul.ishare.loginLog.controller.LoginLogController.queryList(LoginLogController.java:69)  
  42.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  43.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  44.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  45.     at java.lang.reflect.Method.invoke(Method.java:597)  
  46.     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)  
  47.     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)  
  48.     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)  
  49.     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)  
  50.     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)  
  51.     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)  
  52.     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)  
  53.     at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)  
  54.     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)  
  55.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  
  56.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  
  57.     at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)  
  58.     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  
  59.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)  
  60.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  
  61.     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)  
  62.     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  
  63.     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)  
  64.     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  
  65.     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)  
  66.     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)  
  67.     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)  
  68.     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)  
  69.     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)  
  70.     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)  
  71.     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)  
  72.     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)  
  73.     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)  
  74.     at java.lang.Thread.run(Thread.java:662)  

 

解救方法:

       困扰了我很久 ,找了很多资料,问题很简单,就是驱动不支持别名的问题,这里记录下,为后来人造桥!!! 在连接mysql数据库的时候添加    useOldAliasMetadataBehavior=true  这个参数!!!!


     jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/db?useUnicode\=true&characterEncoding\=utf8&useOldAliasMetadataBehavior=true

   

常用的几个较为重要的参数:

 

参数名称 参数说明 缺省值 最低版本要求 
user  数据库用户名(用于连接数据库)     所有版本 
password    用户密码(用于连接数据库)   所有版本 
useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk false    1.1g 
characterEncoding 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false  1.1g 
autoReconnect 当数据库连接异常中断时,是否自动重新连接 false 1.1
autoReconnectForPools 是否使用针对数据库连接池的重连策略 false 3.1.3
failOverReadOnly 自动重连成功后,连接是否设置为只读 true 3.0.12
maxReconnects autoReconnect设置为true时,重试连接的次数 3 1.1
initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2 1.1
connectTimeout 和数据库服务器建立socket连接时的超时,单位:毫秒,0表示永不超时,适用于JDK 1.4及更高版本 0 3.0.1
socketTimeout socket操作(读写)超时,单位:毫秒。 0表示永不超时 0 3.0.1

 

 

REFS: http://blog.itpub.net/90618/viewspace-776511/
            http://blog.csdn.net/renminzdb/article/details/43306749
            http://blog.csdn.net/dyb2010fly/article/details/42235515
  
分享到:
评论

相关推荐

    SQL快速提高手册

    SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。自1970年代由IBM的研究员Edgar F. Codd提出关系型数据库模型以来,SQL逐渐发展成为业界广泛采用的数据访问语言。SQL不仅用于数据查询...

    数据库学习

    以下将详细介绍DB2、MySQL以及HQL(Hibernate Query Language)中常见的操作。 ### DB2数据库操作 1. **增加字段**:在DB2数据库中增加字段通常使用`ALTER TABLE`命令。例如,向`T_KLT_MOBILIZATION`表中增加三个...

    不同数据库中分页的代码实现

    本文将详细介绍几种常见数据库中的分页实现方式,包括SQL Server、MySQL、DB2以及Oracle。 #### 一、SQL Server 分页实现 SQL Server 提供了多种分页方式,其中一种较为流行的方法是利用 `TOP` 关键字结合 `NOT IN...

    HQL查询语言基础

    HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似但更面向对象。HQL提供了丰富的功能来查询和操作数据库中的对象,使得开发人员可以更加专注于业务逻辑而不是...

    蓝桥杯Python之下班倒计时2.zip

    蓝桥杯python 蓝桥杯Python之下班倒计时2.zip

    matlab-配备MPPT(P & O)控制增压转换器的PMSG风力涡轮机仿真模型

    增压转换器和涡轮机的功率为1千瓦。它们适合风速高达12 m/s。涡轮机参考旋转速度150转/分

    jspm酒店客房预定管理系统.docx

    jspm酒店客房预定管理系统

    计算机毕业设计资源大全

    计算机毕业设计资源大全 精选Java、Python、C++等热门语言项目源码、论文模板及开发工具,助力高效完成毕业设计!涵盖Web开发、人工智能、数据库等多个方向,提供完整文档和视频教程,适合计算机专业学生参考学习。一站式资源库,帮你轻松搞定毕设!

    软件测试资源汇总与指南

    "软件测试资源大全:从入门到精通" 这里汇集了最实用的软件测试学习资源,包括工具、教程、书籍和实战案例,适合新手与进阶者。涵盖功能测试、自动化测试、性能测试等方向,助你快速掌握核心技能,提升测试效率。无论自学还是团队参考,这里都是你的优质指南!

    西门子锂电池项目:1500安全型PLC程序开发及多设备集成

    内容概要:本文详细介绍了西门子锂电池项目中1500安全型PLC程序的开发过程及其与多种设备的集成方法。项目涉及雅马哈机器人、视觉系统、库卡机器人和MES通信程序块的对接,采用STL和LAD两种编程语言。文中具体展示了如何通过定义数据结构、构建功能块、处理通信协议等方式实现各设备之间的高效协同工作。此外,还讨论了安全控制、故障排除和性能优化等方面的内容。 适合人群:具备PLC编程基础,从事工业自动化领域的工程师和技术人员。 使用场景及目标:适用于需要理解和掌握PLC编程技巧,特别是在锂电池生产线或其他类似复杂自动化环境中工作的技术人员。目标是提高对PLC编程的理解,增强实际项目开发能力。 其他说明:文章不仅提供了具体的编程实例,还分享了许多实践经验,如如何处理不同设备间的通信协议、优化程序性能以及确保系统的安全性。这对于希望深入了解PLC编程和工业自动化的人来说非常有价值。

    电影推荐及数据分析可视化系统 (Flask框架 + Echarts可视化 + 协同过滤算法 + Mysql数据库) 项目视频

    电影推荐及数据分析可视化系统 (Flask框架 + Echarts可视化 + 协同过滤算法 + Mysql数据库) 项目视频

    CursorUserSetup-x64-0.48.8

    CursorUserSetup-x64-0.48.8

    永磁同步电机矢量控制C代码实现及其S-function仿真与实际应用

    内容概要:本文详细介绍了永磁同步电机(PMSM)矢量控制的C代码实现,涵盖从理论到实践的全过程。首先解释了矢量控制的基本原理,即通过坐标变换将三相电流解耦为励磁电流和转矩电流,以便独立控制电机的转矩和磁通。接着介绍了S-function模式仿真的优势,强调它可以灵活嵌入自定义代码并与其他Simulink模块协同工作。文中提供了关键的C代码示例,包括电机参数和状态变量的初始化、Clark变换和Park变换的具体实现、PI控制器的设计以及SVPWM生成算法。此外,还讨论了代码移植到实际工程项目中的注意事项,如硬件资源对接、参数调整和优化技巧。 适合人群:从事电机控制系统开发的技术人员,尤其是有一定C语言编程基础并对永磁同步电机矢量控制感兴趣的工程师。 使用场景及目标:适用于希望深入了解永磁同步电机矢量控制原理并在实际项目中应用相关技术的研发人员。主要目标是帮助读者掌握从仿真到实际应用的完整流程,提高电机控制系统的开发效率和稳定性。 其他说明:文中不仅提供了详细的代码示例,还分享了许多来自实际项目的宝贵经验和技术细节,如定点运算优化、锁相环(PLL)实现中的常见问题及解决方案、PI控制器的抗积分饱和处理等。这些内容对于理解和解决实际开发中的难题非常有帮助。

    【航空航天工程】基于Matlab和AMESim的反推机构仿真分析:阻流门与滑动罩机构运动特性研究

    本文档详细介绍了反推机构(包括阻流门机构和滑动罩机构)的组成及其仿真要求。阻流门机构由非隐藏式连杆组成,滑动罩机构则由12个阻流门机构及其他结构构成。文档具体列出了利用Matlab进行单阻流门位置状态分析、运动轨迹及力与位移关系曲线绘制、干涉情况分析、多组双变量分析及优化判据等仿真任务的要求,并提出进一步可探索的分析内容。同时,对AMESim仿真提出了建立反推机构仿真模型、分析动态响应特性等要求;

    基于SDN的DDoS攻击与防御复现

    本文是基于SDN网络进行的DDoS攻击与防御测试,采用的工具有:Ubuntu 20.04,floodlight,mininet (安装完整版),Sflow-RT,需要用到java,ant ,curl,等等

    基于HVS的Matlab图像水印嵌入与攻击恢复技术研究

    内容概要:本文详细介绍了利用Matlab实现基于人类视觉系统(HVS)的图像水印嵌入及其在不同攻击条件下的恢复技术。首先,通过DWT分解将水印嵌入到图像的特定频段,确保水印的隐蔽性和鲁棒性。接着,模拟了五种常见的攻击方式(如高斯噪声、裁剪、旋转、JPEG压缩),并展示了如何从受攻击的图像中提取水印。最后,通过PSNR和NC两个指标评估了水印的质量和完整性。实验结果显示,在无攻击情况下PSNR可达40以上,NC接近1;而在不同攻击条件下,NC值有所下降,尤其是旋转攻击对其影响最大。 适合人群:对数字水印技术和图像处理感兴趣的科研人员、学生以及开发者。 使用场景及目标:适用于学术研究和技术开发,旨在探索图像水印的最佳嵌入方法及其应对各类攻击的有效性。目标是提高水印的隐蔽性和抗攻击能力。 其他说明:文中提供了详细的Matlab代码示例,帮助读者更好地理解和实践HVS水印技术。同时指出了一些潜在的问题和改进建议,如旋转攻击后的水印错位问题可以通过模板匹配或校正技术解决。

    图像融合技术详解:多种经典算法的Python实现及其应用场景

    内容概要:本文详细介绍了五种经典的图像融合技术,分别是IHS融合、PCA融合、PCNN融合、小波变换融合以及RGB加权融合。每种方法都有其独特的实现方式和适用场景。IHS融合将RGB图像转换为IHS空间,利用全色图像的亮度信息增强多光谱图像的细节;PCA融合通过主成分分析将全色图像的第一主成分替换成多光谱图像的对应部分;PCNN融合模拟生物视觉系统,特别适用于医学图像处理;小波变换融合则通过对图像进行多尺度分解,在不同尺度上选择最优细节进行融合;RGB加权融合则是最简单的线性加权方法,适合快速处理。文中提供了每种方法的具体Python代码实现,并讨论了各自的特点和局限性。 适合人群:具有一定编程基础,尤其是对图像处理感兴趣的开发者和技术爱好者。 使用场景及目标:① 遥感图像处理中提高图像分辨率和细节;② 医学图像融合中保持细节和结构;③ 实时视频处理中快速获得融合结果;④ 科研项目中探索不同融合方法的效果。 其他说明:本文强调了各种融合方法的实际应用价值,同时指出没有一种方法是万能的,选择合适的融合方法取决于具体的任务需求。此外,文中提到的代码均为简化版本,实际应用时需要注意边界条件和数据预处理等问题。

    工业自动化中三菱PLC与组态王通过OPC实现动态仿真的程序开发

    内容概要:本文详细介绍了如何通过OPC协议将三菱PLC编程软件GX Works2与组态王集成,实现工业自动化系统的动态仿真。主要内容涵盖前期准备、三菱程序编写基础、与OPC关联的关键设置、OPC服务器配置等方面。文中提供了具体的梯形图和结构化文本代码示例,如电机启停控制、数据寄存器传送、定时器控制等,展示了如何通过合理的寄存器分配和OPC配置使组态王能够实时显示PLC数据,从而提高系统监控与控制的可视化程度。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉三菱PLC和组态王的用户。 使用场景及目标:适用于需要将PLC控制系统与人机界面(HMI)进行无缝集成的场合,旨在实现高效的设备状态监测和控制。通过这种方式,用户可以在组态王界面上直观地查看和操作PLC控制的设备,如电机、传感器等。 其他说明:文章还分享了一些实用的调试技巧和注意事项,如避免数据刷新过快导致OPC通信堵塞、使用心跳信号检测通信状态等。此外,强调了提前规划地址映射表的重要性,以确保数据传输的稳定性和准确性。

    台达变频器Modbus通讯控制:基于西门子S7-200 PLC与昆仑通泰触摸屏的应用方案

    内容概要:本文详细介绍了如何利用台达变频器、西门子S7-200型PLC以及昆仑通泰触摸屏构建一套稳定的Modbus通讯控制系统。主要内容涵盖硬件连接方式、关键参数设置、PLC程序编写、触摸屏组态配置及常见问题排查方法。文中提供了详细的代码示例和技术细节,帮助读者快速掌握该系统的搭建与调试技巧。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些负责生产线改造或旧设备升级的专业人士。 使用场景及目标:适用于需要对现有生产设备进行智能化改造的企业,旨在提高生产效率和稳定性。具体应用场景包括但不限于包装线、纺织车间等工业场合。 其他说明:文章强调了参数配置、地址换算、抗干扰措施等方面的重要性,并分享了一些实用的经验和技巧,如避免通讯超时、正确设置终端电阻等。此外,还提供了一些调试工具和方法,便于读者更好地理解和应用所学知识。

    深度学习基于EfficientNet的图像分类模型改进:引入Context Anchor Attention机制提升特征提取精度

    内容概要:本文介绍了一种改进的EfficientNet模型,主要增加了ContextAnchorAttention(CAA)模块。该模型首先定义了基础组件,如卷积层、批归一化、激活函数、Squeeze-and-Excitation(SE)模块以及倒残差结构(Inverted Residual)。CAA模块通过选择最具代表性的锚点来增强特征表示,具体步骤包括通道缩减、选择锚点、收集锚点特征、计算查询、键、值,并进行注意力机制的加权融合。EfficientNet的构建基于宽度和深度系数,通过调整每个阶段的卷积核大小、输入输出通道数、扩展比例、步长、是否使用SE模块等参数,实现了不同版本的EfficientNet。最后,模型还包括全局平均池化层和分类器。 适合人群:对深度学习有一定了解并希望深入研究图像分类模型的设计与实现的研究人员或工程师。 使用场景及目标:①理解EfficientNet架构及其改进版本的设计思路;②掌握如何通过引入新的注意力机制(如CAA)来提升模型性能;③学习如何使用PyTorch实现高效的神经网络。 阅读建议:由于本文涉及大量代码实现细节和技术背景知识,建议读者具备一定的深度学习理论基础和PyTorch编程经验。同时,在阅读过程中可以尝试复现代码,以便更好地理解各模块的功能和作用。

Global site tag (gtag.js) - Google Analytics