日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。