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语句的那。。。。原来是这样的!!!
hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice相关推荐
- [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses
今天在写ssh项目的时候遇到了这样一个问题,我在数据库通过连表查询A老师下的所有班级的时候,把查出来的所有内容(所有字段)放到List里面,代码如下: /** * @title: queryClass ...
- 关于java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 实体类
由于业务逻辑的复杂,有些sql语句写法hql不支持,所以hibernate查询直接用了sql原生查询,由于数据结果根据四个表查询出来,所以无法使用方法.addEntity(XXXXXXX.class) ...
- 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;...
一.当把Object数组,强转的具体的Integer数组时,会报错. 代码如下: //数组强转报错演示 Object[] numbers = {1,2,3};Integer[] ints = (Int ...
- java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String,toArray向下转型失败
问题: 将集合通过toArray转为Object[]数组后,再通过向下转型失败 源代码: public void test(){List<String> list = new ArrayL ...
- Ljava.lang.Object; cannot be cast to……异常
这是因为类型无法转换抛出的异常. 在hibernate框架中,使用了select语句,没有指定返回数据类型,所以默认为Object类,它是所有类的父类.所以当我们遍历list的时候,Object无法转 ...
- java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to
本例错误是Hibernate产生 Session session= sessionFatory.getCurrentSession(); SQLQuery sqlquery= session.crea ...
- 解决:java.lang.ClassCastException:[Ljava.lang.Object
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.alibaba.domain.Person解决方法: p ...
- getObject(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; is abstract解决
今天在使用SpringBoot 和Mybatis-plus 连接SQL Server 生成代码的时候出现的问题: <!--sqlServer--><dependency>< ...
- java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object解决
完整报错如下: 19/05/15 15:26:10 WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.Na ...
最新文章
- [Tomcat]Tomcat6和Tomcat7的区别
- 2021年江西省副高考试成绩查询,江西省教育考试院:2021年江西高考成绩查询入口、查分系统...
- EasyUI datagrid控件的基本使用
- CentOS中使用Dockerfile部署初始化sql文件的mysql
- MemSQL初体验 - (1)传说中速度最快的关系数据库软件
- 科普扫盲,HTTP Status Code详解,从此排错无忧!
- stm32标准外设库和芯片资料下载地址
- java中的线程不安全和实例解析
- doxygen相关问题
- 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
- Thymeleaf学习总结(1)——新一代Java模板引擎Thymeleaf
- 2021年河北高考生成绩排名查询,2021年河北省高考报名人数、录取分数线、河北省最好大学排名统计[图]...
- 5.7 C和C++的关系
- com.autonavi.amap.mapcore.MapCore.nativeNewInstance:(Ljava/lang/String;Ljava/lang/String;)J
- html 好看的英文字体,力荐!8款超有设计感的英文字体。
- Oracle 后台进程详解
- pytorch参数dim为-1的解释
- Linux下的gpt分区
- 基于msm8916移植lcd流程--LK
- 基于NV040D-S8语音芯片在智能水杯/保温杯的方案设计
热门文章
- Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)
- 预警展示样式html,纯css3 Tooltip工具提示样式
- 大学计算机基础英语翻译,大学计算机基础 教学课件 978 7 302 21247 8 第7章 常用工具软件.pdf...
- android仿支付宝弹窗,【转】MUI自定义底部弹窗自带遮罩层仿支付宝支付弹窗
- #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)
- P3714 [BJOI2017]树的难题
- KMP Trie 例题讲解
- [SPOJ - FTOUR2] Free tour II(点分治 + 背包dp + 启发式合并)
- test1 3-15 模拟赛1
- CF1654F-Minimal String Xoration【倍增】