Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 399|回复: 0

Hibernate中Query.list()方法报IllegalArgumentException异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-3 16:20:14 | 显示全部楼层 |阅读模式

      最近在使用Hibernate开发项目,在写好hql语句,并初始化Query对象,执行Query.list()方法时,应用报IllegalArgumentException异常。经网上查询,现已经基本决定原因,是由于在利用hibernate逆向工程生成实体类和映射文件时,数据库字段的numeric类型被逆向成了java实体类中的Doubel类型,然后我觉得这里不应该用包装类,手贱就改成了基本数据类型double,这一改出了问题,数据库中字段的数据类型和java实体类中的属性类型对不上了,出现了IllegalArgumentException异常。解决方法当然是将double类型改回Double类型。我想,如果大家也有这个异常,基本可以断定是由于数据库中的字段的数据类型和java实体类中的属性类型不匹配造成的

      现在将我解决问题的过程给大家描述一下:

    1:出问题的代码位置:Query.list()方法

    public PageModel queryByPage(String where, int start, int limit) {
    
            StringBuffer hql = new StringBuffer("SELECT Object(o) FROM DsImageVideoData AS o WHERE 1=1");
            StringBuffer hql_count = new StringBuffer("SELECT Count(o) FROM DsImageVideoData AS o WHERE 1=1");

    Session session = hibernateTemplate.getSessionFactory().openSession(); //获得hibernate session对象 Query query = session.createQuery(hql.toString()); // 获得对应hql语句的查询对象query Query query_count = session.createQuery(hql_count.toString()); // 获得对应hql_count语句的查询对象query int pageTmp = start; int switchPage = (pageTmp -1 ) * limit; query.setFirstResult(switchPage); query.setMaxResults(10); PageModel page = new PageModel(); page.setPageNumber(start); page.setObjectsPerPage(limit); page.setFullListSize(Integer.valueOf(query_count.list().get(0).toString())); page.setData(query.list()); //query.list()作用是执行查询,出现异常 return page; }

      以上代码中的page.setData(query.list());出现异常。

    2. 异常信息

     1 严重: Servlet.service() for servlet dispatcher threw exception
     2 java.lang.IllegalArgumentException
     3     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     4     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
     5     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     6     at java.lang.reflect.Method.invoke(Method.java:606)
     7     at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
     8     at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
     9     at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
    10     at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3566)
    11     at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
    12     at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
    13     at org.hibernate.loader.Loader.doQuery(Loader.java:729)
    14     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    15     at org.hibernate.loader.Loader.doList(Loader.java:2220)
    16     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    17     at org.hibernate.loader.Loader.list(Loader.java:2099)
    18     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    19     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    20     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    21     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    22     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    23     at com.c503.poss.dao.disaster.DsDisasterDamageDaoImpl.queryByPage(DsDisasterDamageDaoImpl.java:78)
    24     at com.c503.poss.service.disaster.DsDisasterDamageServiceImpl.findByCommon(DsDisasterDamageServiceImpl.java:107)
    25     at com.c503.poss.service.disaster.DsDisasterDamageServiceImpl.findDisasterDamage(DsDisasterDamageServiceImpl.java:94)
    26     at com.c503.poss.ctrl.disaster.DsDisasterDamageController.findDisasterDamage(DsDisasterDamageController.java:218)
    27     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    28     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    29     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    30     at java.lang.reflect.Method.invoke(Method.java:606)
    31     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
    32     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
    33     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
    34     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
    35     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    36     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    37     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
    38     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
    39     at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
    40     at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    41     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    42     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    43     at com.c503.poss.ctrl.sm.SecurityFilter.doFilter(SecurityFilter.java:73)
    44     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    45     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    46     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    47     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    48     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    49     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    50     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    51     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    52     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    53     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    54     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    55     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    56     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
    57     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617)
    58     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760)
    59     at java.lang.Thread.run(Thread.java:745)

    3. 数据库相关表字段设计,相关字段为data_size和data_time_length

    4. 出问题的实体类为:红色的double字体处出错

      1 package com.c503.poss.model.disaster;
      2 
      3 import java.util.Date;
      4 
      5 
      6 /**
      7  * DsImageVideoData entity. @author MyEclipse Persistence Tools
      8  */
      9 
     10 public class DsImageVideoData {
     11 
     12 
     13     // Fields    
     14 
     15      private Integer id;
     16      private DsTower dsTowerByEndTowerId;
     17      private DsLine dsLine;
     18      private DsTower dsTowerByStartTowerId;
     19      private DsDisaster dsDisaster;
     20      private String disasterTypeName;
     21      private String dataKind;
     22      private String dataName;
     23      private String storagePath;
     24      private double dataSize;
     25      private double dataTimeLength;
     26      private String dataFormat;
     27      private String dataType;
     28      private String phase;
     29      private Date time;
     30 
     31 
     32     // Constructors
     33 
     34     /** default constructor */
     35     public DsImageVideoData() {
     36     }
     37 
     38     /** minimal constructor */
     39     public DsImageVideoData(DsLine dsLine, DsDisaster dsDisaster) {
     40         this.dsLine = dsLine;
     41         this.dsDisaster = dsDisaster;
     42     }
     43     
     44    
     45     // Property accessors
     46 
     47     public Integer getId() {
     48         return this.id;
     49     }
     50     
     51     public void setId(Integer id) {
     52         this.id = id;
     53     }
     54 
     55     public DsTower getDsTowerByEndTowerId() {
     56         return this.dsTowerByEndTowerId;
     57     }
     58     
     59     public void setDsTowerByEndTowerId(DsTower dsTowerByEndTowerId) {
     60         this.dsTowerByEndTowerId = dsTowerByEndTowerId;
     61     }
     62 
     63     public DsLine getDsLine() {
     64         return this.dsLine;
     65     }
     66     
     67     public void setDsLine(DsLine dsLine) {
     68         this.dsLine = dsLine;
     69     }
     70 
     71     public DsTower getDsTowerByStartTowerId() {
     72         return this.dsTowerByStartTowerId;
     73     }
     74     
     75     public void setDsTowerByStartTowerId(DsTower dsTowerByStartTowerId) {
     76         this.dsTowerByStartTowerId = dsTowerByStartTowerId;
     77     }
     78 
     79     public DsDisaster getDsDisaster() {
     80         return this.dsDisaster;
     81     }
     82     
     83     public void setDsDisaster(DsDisaster dsDisaster) {
     84         this.dsDisaster = dsDisaster;
     85     }
     86 
     87     public String getDisasterTypeName() {
     88         return this.disasterTypeName;
     89     }
     90     
     91     public void setDisasterTypeName(String disasterTypeName) {
     92         this.disasterTypeName = disasterTypeName;
     93     }
     94 
     95     public String getDataKind() {
     96         return this.dataKind;
     97     }
     98     
     99     public void setDataKind(String dataKind) {
    100         this.dataKind = dataKind;
    101     }
    102 
    103     public String getDataName() {
    104         return this.dataName;
    105     }
    106     
    107     public void setDataName(String dataName) {
    108         this.dataName = dataName;
    109     }
    110 
    111     public String getStoragePath() {
    112         return this.storagePath;
    113     }
    114     
    115     public void setStoragePath(String storagePath) {
    116         this.storagePath = storagePath;
    117     }
    118 
    119     public double getDataSize() {
    120         return this.dataSize;
    121     }
    122     
    123     public void setDataSize(double dataSize) {
    124         this.dataSize = dataSize;
    125     }
    126 
    127     public double getDataTimeLength() {
    128         return this.dataTimeLength;
    129     }
    130     
    131     public void setDataTimeLength(double dataTimeLength) {
    132         this.dataTimeLength = dataTimeLength;
    133     }
    134 
    135     public String getDataFormat() {
    136         return this.dataFormat;
    137     }
    138     
    139     public void setDataFormat(String dataFormat) {
    140         this.dataFormat = dataFormat;
    141     }
    142 
    143     public String getDataType() {
    144         return this.dataType;
    145     }
    146     
    147     public void setDataType(String dataType) {
    148         this.dataType = dataType;
    149     }
    150 
    151     public String getPhase() {
    152         return this.phase;
    153     }
    154     
    155     public void setPhase(String phase) {
    156         this.phase = phase;
    157     }
    158 
    159     public Date getTime() {
    160         return this.time;
    161     }
    162     
    163     public void setTime(Date time) {
    164         this.time = time;
    165     }
    166 }

    5. 改进

      将步骤3中实体类中的属性dataSize和dataTimeLength的数据类型给回Double(包括setter和getter中的方法)

    【重要参考】:http://www.cnblogs.com/lucky2u/p/3498046.html

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-29 18:31 , Processed in 0.073318 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表