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

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

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

  1. public PageModel queryByPage(String where, int start, int limit) {
  2.  
  3. StringBuffer hql = new StringBuffer("SELECT Object(o) FROM DsImageVideoData AS o WHERE 1=1");
  4. StringBuffer hql_count = new StringBuffer("SELECT Count(o) FROM DsImageVideoData AS o WHERE 1=1");
  5.  
  6. Session session = hibernateTemplate.getSessionFactory().openSession(); //获得hibernate session对象
  7. Query query = session.createQuery(hql.toString()); // 获得对应hql语句的查询对象query
  8. Query query_count = session.createQuery(hql_count.toString()); // 获得对应hql_count语句的查询对象query
  9.  
  10. int pageTmp = start;
  11. int switchPage = (pageTmp - ) * limit;
  12. query.setFirstResult(switchPage);
  13. query.setMaxResults();
  14. PageModel page = new PageModel();
  15. page.setPageNumber(start);
  16. page.setObjectsPerPage(limit);
  17. page.setFullListSize(Integer.valueOf(query_count.list().get().toString()));
  18. page.setData(query.list()); //query.list()作用是执行查询,出现异常
  19. return page;
  20. }

  以上代码中的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:)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:)
  6. at java.lang.reflect.Method.invoke(Method.java:)
  7. at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:)
  8. at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:)
  9. at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:)
  10. at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:)
  11. at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:)
  12. at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:)
  13. at org.hibernate.loader.Loader.doQuery(Loader.java:)
  14. at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:)
  15. at org.hibernate.loader.Loader.doList(Loader.java:)
  16. at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:)
  17. at org.hibernate.loader.Loader.list(Loader.java:)
  18. at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:)
  19. at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:)
  20. at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:)
  21. at org.hibernate.impl.SessionImpl.list(SessionImpl.java:)
  22. at org.hibernate.impl.QueryImpl.list(QueryImpl.java:)
  23. at com.c503.poss.dao.disaster.DsDisasterDamageDaoImpl.queryByPage(DsDisasterDamageDaoImpl.java:)
  24. at com.c503.poss.service.disaster.DsDisasterDamageServiceImpl.findByCommon(DsDisasterDamageServiceImpl.java:)
  25. at com.c503.poss.service.disaster.DsDisasterDamageServiceImpl.findDisasterDamage(DsDisasterDamageServiceImpl.java:)
  26. at com.c503.poss.ctrl.disaster.DsDisasterDamageController.findDisasterDamage(DsDisasterDamageController.java:)
  27. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  28. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:)
  29. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:)
  30. at java.lang.reflect.Method.invoke(Method.java:)
  31. at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:)
  32. at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:)
  33. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:)
  34. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:)
  35. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:)
  36. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:)
  37. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:)
  38. at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:)
  39. at javax.servlet.http.HttpServlet.service(HttpServlet.java:)
  40. at javax.servlet.http.HttpServlet.service(HttpServlet.java:)
  41. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:)
  42. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:)
  43. at com.c503.poss.ctrl.sm.SecurityFilter.doFilter(SecurityFilter.java:)
  44. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:)
  45. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:)
  46. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:)
  47. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:)
  48. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:)
  49. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:)
  50. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:)
  51. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:)
  52. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:)
  53. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:)
  54. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:)
  55. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:)
  56. at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:)
  57. at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:)
  58. at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:)
  59. at java.lang.Thread.run(Thread.java:)

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

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

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

5. 改进

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

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

Hibernate中Query.list()方法报IllegalArgumentException异常的更多相关文章

  1. eclipse中运行 main 方法报错,找不到类

    eclipse (maven 项目)中运行 main 方法报错,找不到类 ** 发现:在 eclipse中的 "Marker" 控制面板中 ,发现问题所在 只要删除 maven 仓 ...

  2. Hibernate中Session.get()方法和load()方法的详细比较

    一.get方法和load方法的简易理解  (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用 ...

  3. hibernate中Query的list和iterator区别(续)

    打开cache后query的list和iterator方法区别 将query 的cache打开的话,缓存的是query本身,以hql 生成的 sql ,再加上参数,分页等信息做为key值,而不是que ...

  4. Hibernate 中 load() 方法导致的 noSession 异常

    之所以要写这个,是因为最近碰到了一个延迟加载的 load() 导致出现 noSession 的异常. 下面第三种方式解决这个问题需要用到一个本地线程的对象,也就是 ThreadLocal 类,之前写过 ...

  5. hibernate中many-to-one关联时出现ObjectNotFoundException异常

    采用多对一关联,如果一的那端删除了,多的这端无法感知,虽然数据库中可以通过外键配置将多的一端置空,可是在hibernate里面我暂时不知道如何处理. 目前采用的方式: 1.首先,数据库中需要配置好外键 ...

  6. hibernate中Query的list和iterator区别

    1.Test_query_list类 public class Test_query_iterator_list { public static void main(String[] args) { ...

  7. 关于Hibernate中Java实体类加载出现序列化异常

    晚上跟着教程敲网上商城项目的时候(ssh框架写的),碰到了一个问题,就是如题所示的序列化异常问题,这个问题纠结了很久,最后发现了一个解决方法,虽然这篇文章可能几乎不会被人访问到,但是还是要写出来! 其 ...

  8. hibernate 中 query.list()的优化

    2018年3月15日  今天做项目遇到一个需求,问题是在调用query.list()的时候,因为数据也多大概700条左右,查询一次需要30s+,这简直是不能忍,于是开始考虑怎么优化. 1.因为是单表查 ...

  9. .NET 程序在 Windows XP 下调用 SHA512CryptoServiceProvider 方法报 PlatformNotSupportedException 异常

    转自:http://stackoverflow.com/questions/1293905/sha256cryptoserviceprovider-and-related-possible-to-us ...

随机推荐

  1. How To Make A DFF Read Only Through Form Personalisations? (文档 ID 1289789.1)

    In this Document   Goal   Solution   References APPLIES TO: Oracle Application Object Library - Vers ...

  2. Oracle Inventory Management Application Program Interface ( APIs) (Doc ID 729998.1)

    In this Document Goal Solution References APPLIES TO: Oracle Inventory Management - Version 12.0.0 a ...

  3. C#基础入门 十一

    C#基础入门 十一 复选框 复选框的应用--问卷调查 实现描述:通过问卷调查统计性别和下班后回家的方式,单击"提交"按钮,通过消息框显示所提交的信息.运行结果如下图所示(图27): ...

  4. LUN

    1概念 LUN的全称是Logical Unit Number,也就是逻辑单元号.我们知道SCSI总线上可挂接的设备数量是有限的,一般为8个或者16个,我们可以用Target ID(也有称为SCSI I ...

  5. [Java]java内存及数据区

    Java运行时的数据区包括:(其中前两个是线程共享的) 1.方法区(Method Area) 存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据 2.堆(Heap) 存放对象实例 ...

  6. C# skip 重试执行代码段

    var retryTimes = 5; //重试次数 int times = 0;  skip:              //代码段开始 //处理逻辑 var result=false ;   // ...

  7. Visual Studio效率神器——超级扩展ReSharper安装和破解

    Visual Studio效率神器--超级扩展ReSharper安装和破解   ReSharper的使用方法网络上有文章Resharper安装和破解极其简单,2分钟就搞定了.安装ReSharper官方 ...

  8. StringBudiler源码简单解析

    StringBudiler源码 继承关系树 底层实现 默认容量() 特别的添加方法(append) 1.继承关系树 继承自AbstractStringBuilder与StringBuffer同族 2. ...

  9. iOS仿UC浏览器顶部频道滚动效果

    很喜欢用UC浏览器上网,当然不是给UC打广告,里面有很多酷炫的效果,值的学习,这次分享的是频道滚动的效果.动画效果如下: 实现的这个效果的关键是绘制,重写顶部Label的drawRect方法 gith ...

  10. Code Chef February Challenge 2019题解

    传送门 \(HMAPPY2\) 咕 话说这题居然卡\(scanf\)的么??? int T;cin>>T; while(T--){ cin>>n>>a>> ...