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

先来看看出现的异常:

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相关推荐

  1. [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses

    今天在写ssh项目的时候遇到了这样一个问题,我在数据库通过连表查询A老师下的所有班级的时候,把查出来的所有内容(所有字段)放到List里面,代码如下: /** * @title: queryClass ...

  2. 关于java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 实体类

    由于业务逻辑的复杂,有些sql语句写法hql不支持,所以hibernate查询直接用了sql原生查询,由于数据结果根据四个表查询出来,所以无法使用方法.addEntity(XXXXXXX.class) ...

  3. 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;...

    一.当把Object数组,强转的具体的Integer数组时,会报错. 代码如下: //数组强转报错演示 Object[] numbers = {1,2,3};Integer[] ints = (Int ...

  4. java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String,toArray向下转型失败

    问题: 将集合通过toArray转为Object[]数组后,再通过向下转型失败 源代码: public void test(){List<String> list = new ArrayL ...

  5. Ljava.lang.Object; cannot be cast to……异常

    这是因为类型无法转换抛出的异常. 在hibernate框架中,使用了select语句,没有指定返回数据类型,所以默认为Object类,它是所有类的父类.所以当我们遍历list的时候,Object无法转 ...

  6. java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

    本例错误是Hibernate产生 Session session= sessionFatory.getCurrentSession(); SQLQuery sqlquery= session.crea ...

  7. 解决:java.lang.ClassCastException:[Ljava.lang.Object

    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.alibaba.domain.Person解决方法: p ...

  8. getObject(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; is abstract解决

    今天在使用SpringBoot 和Mybatis-plus 连接SQL Server 生成代码的时候出现的问题: <!--sqlServer--><dependency>< ...

  9. 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 ...

最新文章

  1. [Tomcat]Tomcat6和Tomcat7的区别
  2. 2021年江西省副高考试成绩查询,江西省教育考试院:2021年江西高考成绩查询入口、查分系统...
  3. EasyUI datagrid控件的基本使用
  4. CentOS中使用Dockerfile部署初始化sql文件的mysql
  5. MemSQL初体验 - (1)传说中速度最快的关系数据库软件
  6. 科普扫盲,HTTP Status Code详解,从此排错无忧!
  7. stm32标准外设库和芯片资料下载地址
  8. java中的线程不安全和实例解析
  9. doxygen相关问题
  10. 信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...
  11. Thymeleaf学习总结(1)——新一代Java模板引擎Thymeleaf
  12. 2021年河北高考生成绩排名查询,2021年河北省高考报名人数、录取分数线、河北省最好大学排名统计[图]...
  13. 5.7 C和C++的关系
  14. com.autonavi.amap.mapcore.MapCore.nativeNewInstance:(Ljava/lang/String;Ljava/lang/String;)J
  15. html 好看的英文字体,力荐!8款超有设计感的英文字体。
  16. Oracle 后台进程详解
  17. pytorch参数dim为-1的解释
  18. Linux下的gpt分区
  19. 基于msm8916移植lcd流程--LK
  20. 基于NV040D-S8语音芯片在智能水杯/保温杯的方案设计

热门文章

  1. Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)
  2. 预警展示样式html,纯css3 Tooltip工具提示样式
  3. 大学计算机基础英语翻译,大学计算机基础 教学课件 978 7 302 21247 8 第7章 常用工具软件.pdf...
  4. android仿支付宝弹窗,【转】MUI自定义底部弹窗自带遮罩层仿支付宝支付弹窗
  5. #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)
  6. P3714 [BJOI2017]树的难题
  7. KMP Trie 例题讲解
  8. [SPOJ - FTOUR2] Free tour II(点分治 + 背包dp + 启发式合并)
  9. test1 3-15 模拟赛1
  10. CF1654F-Minimal String Xoration【倍增】