hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice

     最近在做项目中遇到一个简单的问题,但是解决了好久,问题就是投影查询。

先来看看出现的异常:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice
    at cn.bdqn.guanMingSys.dao.impl.NoticeDaoImpl.getNoticeByMaxDate(NoticeDaoImpl.java:138)
    at cn.bdqn.guanMingSys.service.impl.NoticeServiceImpl.getNoticeByMaxDate(NoticeServiceImpl.java:132)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
....................

后面的省略一大推看不懂的东西。。。

很显然,问题的本质是转换失败。看看我写的hql语句:

查询最大的日期和名称,就是因为太懒,知道这是个投影查询,就是不想用,哎。。。。

我先在数据库里面查询了一遍,没问题,就没改这个hql语句,以为可以直接使用!

直到在单元测试里面测试了一遍,出错。。。。。

转换异常嘛!好说,我改:

/*** (非 Javadoc)* <p>Title: getNoticeByMaxDate</p>* <p>Description(描述):最近发布的公告 </p>* @return* @see cn.bdqn.guanMingSys.dao.INoticeDao#getNoticeByMaxDate()*/@Overridepublic Notice getNoticeByMaxDate() {Notice notice  = new Notice();String hql = "select new Notice (MAX(noticedate),noticename) from Notice";Session session = this.getSession();List<Object[]> noticeList =	 session.createQuery(hql).list();for (Object[] obj : noticeList) {System.out.println(obj[0]);notice = (Notice) obj[0];}return notice;}

我再改:

@Overridepublic Notice getNoticeByMaxDate() {String hql = "select MAX(noticeid) from Notice";Session session = this.getSession();Notice notice =	(Notice) session.createQuery(hql).uniqueResult();return notice;}

我继续改:

@Overridepublic Notice getNoticeByMaxDate() {Notice notice = null;String hql = "select MAX(noticeid) from Notice ";Session session = this.getSession();List<Notice> noticeList =	session.createQuery(hql).list();if(noticeList.size()!=0){notice = noticeList.get(0);}return notice;}
.......

改了大概10几遍。我上翻Google,下翻百度!!!左进Statick Overflow,右逛csdn.然而并没有什么卵用!!!

机智的我就去群成员2000左右的java群里面满怀激动的问了一下此问题。


卧槽,群里人还是该吹牛逼的吹牛逼,改撩妹的撩妹!!!居然不鸟我。。。。。(能不求人的尽量不求人!要想不求其他人,自己先强于其他人!)

看来还是得靠自己喽。上个厕所在说吧!!!还别说,多亏这个上厕所这个bug得以解决。。。在上厕所的路上边走边想这个bug,要不用投影查询试试?还试个啥啊,这tmd就是头应查询啊,赶紧在厕所解决完就回来写!

    于是,我在一次的对我的代码进行了更改!!!

改为:

@Overridepublic Notice getNoticeByMaxDate() {Notice notice  = new Notice();String hql = "select new Notice (noticename,MAX(noticedate)) from Notice";Session session = this.getSession();List<Notice> noticeList =	 session.createQuery(hql).list();if(noticeList.size()!=0){notice = noticeList.get(0);}return notice;}

激动的去运行了一下,,,果不其然的得到如下结果:

    控制太的错误信息:

[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: cn.bdqn.guanMingSys.entity.Notice]

      对于现在的我来说,虽然报错,,,,但是错误换了也好说,总比之前的错误好(没有一点点解决的余地),出现以上的错误,怪我英文水平不行,那就去谷歌呗,看看谷歌怎么说:


  哦哦,他和我说是缺少个构造函数,现在的hql语句的new里面有两个字段,noticename和noticedate,因为构造函数只有全参的和无参的,所以不对应!!!然后我将信将疑的加了个构造函数,怀着一颗紧张又激动的心去点了一下它,哥们,行不行就靠你了今晚让我几点睡全靠您老的心情了,网开一面让我早点睡吧,明天我还有课呢。。。。神叨叨了半天程序运行完了!行完了!!完了!!!了!!

打开控制台一看:

哈哈哈哈,可以了!!!重新回头看看hql语句的那。。。。原来是这样的!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构师之路:从码农到架构师你差了哪些

转载自 架构师之路&#xff1a;从码农到架构师你差了哪些 Web应用&#xff0c;最常见的研发语言是Java和PHP。 后端服务&#xff0c;最常见的研发语言是Java和C/C。 大数据&#xff0c;最常见的研发语言是Java和Python。 可以说&#xff0c;Java是现阶段中国互联网公司中&…

Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题&#xff0c;就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现。SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字&#xff0c;它表明数据库中数…

干货 | Tomcat 连接数与线程池详解

转载自 干货 | Tomcat 连接数与线程池详解 前言 在使用tomcat时&#xff0c;经常会遇到连接数、线程数之类的配置问题&#xff0c;要真正理解这些概念&#xff0c;必须先了解Tomcat的连接器&#xff08;Connector&#xff09;。 在前面的文章 详解Tomcat配置文件server.xml…

120项优化: 超级爬虫Hawk 2.0重磅发布!

沙漠君在历时半年&#xff0c;修改无数bug&#xff0c;更新一票新功能后&#xff0c;在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥&#xff1f;你不知道Hawk干吗用的&#xff1f; 这是采集数据的挖掘机&#xff0c;网络猎杀的重狙&#xff01;半年多以前&#xff0c;沙漠君写…

github创建一个新的tag

https://git-scm.com/book/en/v2/Git-Basics-Tagging

phone6s home键按不动了怎么办 苹果6s home键按不动解决方法

iphone6s home键按不动了怎么办 苹果6s home键按不动解决方法 作者&#xff1a;佚名 来源&#xff1a;绿茶软件园 2016-02-15 15:53:35 iphone6s home键按不动了怎么办&#xff1f;有iphone用户遇到home键按不动了的问题&#xff0c;下文小乐哥带来苹果6s home键按不动解决方法…

开源库Magicodes.ECharts使用教程

概要 Magicodes.ECharts是心莱团队基于百度EChart封装的开源的.NET类库&#xff0c;以便让用户更快更便捷的上手开发EChart图表。本篇主要讲解Magicodes.ECharts的相关使用。 注意&#xff1a;EChart图表插件是由百度提供的一套前端图表库&#xff0c;可以流畅运行在PC端和移动…

.NET Core 2.0版本预计于2017年春季发布

微软项目经理Immo Landwerth公布了即将推出的.NET Core 2.0版本的细节&#xff0c;该版本预计于2017年春季发布。这是.NET Core平台的一个重要发布&#xff0c;因为2.0版本对.NET Core的各项功能都有显著扩展。 言归正传&#xff0c;我们来看看即将发布的.NET Core 1.0版本。按…

我是一棵“树”

转载自 我是一棵“树” 我是一颗树&#xff0c;之前我们数据结构家族中的一个小朋友——“栈” 已经给你们介绍过的我们这个家族了&#xff08;我是一个“栈”&#xff09;。之所以叫栈为小朋友&#xff0c;是因为我和他的爸爸——数组是平辈的。 之所以存在我们这样一个家庭&…

pycharm前进、后退快捷键

https://blog.csdn.net/jamieblue1/article/details/89087064 pycharm前进、后退快捷键 jamieblue1 2019-04-08 13:45:17 13663 收藏 4 分类专栏&#xff1a; 其他 文章标签&#xff1a; python pycharm 版权 前进/回退到上一个操作的地方win&#xff1a; 后退 ctrlalt&l…

判断字符串相等能否用==

为什么呢&#xff1f; 是因为比较的是两个对象的内存地址&#xff0c;我们知道变量被创建的时候就相当于在内存中开辟空间&#xff0c;而案例中str和str1就是占用的两块不同的空间&#xff0c;所以他们的内存地址是不一致的&#xff0c;在用符号判断的时候就不相等了&#xff0…

数据库 wifi探针数据量太大了

https://www.cnblogs.com/showcase/p/11654045.html https://www.cnblogs.com/showcase/p/11654045.html 橱窗外的小孩 在完成任务的同时&#xff0c;还需要不断“复盘”&#xff0c;不论你多么的忙&#xff0c;都需要留下时间思考&#xff0c;可以思考哪些地方做的好&#x…

CoreCLR源码探索(一) Object是什么

.Net程序员们每天都在和Object在打交道如果你问一个.Net程序员什么是Object&#xff0c;他可能会信誓旦旦的告诉你"Object还不简单吗&#xff0c;就是所有类型的基类"这个答案是对的&#xff0c;但是不足以说明Object真正是什么 在这篇文章我们将会通过阅读CoreCLR的…

分布式的CAP理论

转载自 分布式的CAP理论 CAP理论概述 2000年7月&#xff0c;加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后&#xff0c;麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后&#xff0c;CAP理论正式成为分布式计算领域的公认定理。 一…

使用navicat 复制 数据库 使用mysql5.7 utf8mb4 utf8mb4_general_ci 爬虫的时候就支持表情包了

使用mysql5.7 utf8mb4 utf8mb4_general_ci 爬虫的时候就支持表情包了 mysql8.0差别有点大 将python_spider 完整的复制到python_spider_copy上面 1.右键选中python_spider 选择数据传输 默认传输所有表&#xff0c;你可以进行选择 工具里面的数据…

设计爬虫Hawk背后的故事

本文写于圣诞节北京下午慵懒的午后。本文偏技术向&#xff0c;不过应该大部分人能看懂。 五年之痒 2016年&#xff0c;能记入个人年终总结的事情没几件&#xff0c;其中一个便是开源了Hawk。我花不少时间优化和推广它&#xff0c;得到的评价还算比较正面&#xff0c;因为负面评…