hibernate獲取count(*)


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type Exception report
 
message
 
description The server encountered an internal error () that prevented it from fulfilling  this  request.
 
exception
 
org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
     org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java: 522 )
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 416 )
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 337 )
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java: 266 )
     javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
 
root cause
 
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
     net.java2000.notepad.service.impl.hibernate.PostServiceHibernateImpl.countAllSubject(PostServiceHibernateImpl.java: 24 )
     org.apache.jsp.jsph.index_jsp._jspService(index_jsp.java: 93 )
     org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java: 70 )
     javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 374 )
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 337 )
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java: 266 )
     javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
 
note The full stack trace of the root cause is available in the Apache Tomcat/ 6.0 . 16  logs.

1.主要代碼

Query query = getSession().createQuery(hql);
query.setInteger(0, id);
Long count=(Long) query.iterate().next();//返回值是Long
return count;

 

2.解決Long轉為Integer的問題

代碼:

Query query = getSession().createQuery(hql);
query.setInteger(0, id);
Number count= (Number) query.iterate().next();//返回值是Long
return count.intValue();

測試:

Integer id=1;
String hql="SELECT COUNT(s.suiteExamination.suiteId) FROM LogSuiteExamination s WHERE s.suiteExamination.suiteId=?";
Integer count=(Integer) new LogSuiteExaminationDaoImpl().queryLogCountById(hql, id);
System.out.println(count);

 

因為無論是Long還是Integer,還是BigInteger,它們都是Number的子類,所以用Number去cast這個結果是肯定不會錯的,然后,最好定義在Number里面這些方法可以統一的返回需要的類型;

 byte byteValue() 
          以 byte 形式返回指定的數值。 
abstract  double doubleValue() 
          以 double 形式返回指定的數值。 
abstract  float floatValue() 
          以 float 形式返回指定的數值。 
abstract  int intValue() 
          以 int 形式返回指定的數值。 
abstract  long longValue() 
          以 long 形式返回指定的數值。 
 short shortValue() 
          以 short 形式返回指定的數值。 


=====================================================
java.lang 
類 Number
java.lang.Object
  java.lang.Number
所有已實現的接口: 
Serializable 
直接已知子類: 
AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM