`
fantaxy025025
  • 浏览: 1308522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Hibernate_count_sum_统计函数的返回结果类型_与怎样兼容

阅读更多

今天碰到一个Hibernate的问题,记录一下。

在本机测试可以通过的代码,上传如公司Beta环境测试,报错:failureReason=java.lang.Integer cannot be cast to java.lang.Long

查找bug原来在统计函数:count(*)的返回结果处出错。

 

原因:

从Hibernate 3.0.x/3.1.x升级到最新的3.2版之后,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。

 

解决方法:

返回的结果既然类型不一样,那怎样兼容呢?用父接口统一表示。

(1)返回结果用Number标识。

(2)取值的时候根据个人喜好用Number的方法(如下),个人推荐用longValue ()方法。

 

java.lang.Object

    ----java.lang.Number

byteValue

doubleValue

floatValue

intValue

longValue

shortValue

 

例子:

//报错的写法:

Long count = (Long) session.createQuery(hql.toString())
                .setParameter("customerInvoiceInfoId", customerInvoiceInfoId)
                .setParameter("customerId", customerId)
                .uniqueResult()
                ;

if(count > 0) {
            return true;
        }else{
            return false;
        }

}

 

//正确的写法

Number count = (Number) session.createQuery(hql.toString())
                .setParameter("customerInvoiceInfoId", customerInvoiceInfoId)
                .setParameter("customerId", customerId)
                .uniqueResult()
                ;
        if(count.longValue() > 0) {
            return true;
        }else{
            return false;
        }

}

分享到:
评论

相关推荐

    Hibernate_query聚合函数查询.

    `uniqueResult()`方法将返回`COUNT`函数的结果。 其次,`AVG`函数用于计算平均值。假设我们有一个`Salary`字段,想要计算所有员工的平均工资: ```java Query query = session.createQuery("SELECT AVG(salary) ...

    \Hibernate_query条件查询

    投影用于获取特定列,而聚合函数(如COUNT, SUM, AVG等)用于统计。例如: ```java // HQL query = session.createQuery("select count(u) from User u"); // Criteria ProjectionList projections = ...

    hibernate_hql.rar_HQL

    HQL提供了如count、sum、avg、max、min等聚合函数,用于统计和计算。例如,获取User表中最大的年龄: ```java String hql = "select max(age) from User"; Object maxAge = query.uniqueResult(); ``` 四、HQL分组...

    Hibernate_Query_Language基础认识.rar

    - **GROUP BY子句**:用于分组,常与聚合函数(如COUNT、SUM等)一起使用。 - **JOIN操作**:HQL支持内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN等)。 3. **HQL的高级特性** - **集合查询**:HQL可以...

    Spring_Structs_Hibernate

    - 统计函数:如COUNT、SUM等。 #### 6. 如何优化Hibernate? - 使用适当的关联类型和策略。 - 合理配置缓存策略。 - 减少不必要的字段,合理设计数据库结构。 - 使用适当的集合类型。 #### 7. Struts 工作机制及...

    hibernate多表联合查询

    - 使用`SUM()`函数来计算每个顾客在指定时间段内的消费总额。 - `GROUP BY`子句按顾客ID分组结果集。 #### 五、Native SQL实现多表联合查询 有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的...

    hibernate_hql___.zip_Jsp/Servlet_Java_

    - HQL提供了如`count()`、`max()`、`min()`、`avg()`、`sum()`等聚合函数,用于统计分析。 - 例如,`select count(e) from Employee e`可以计算员工总数。 7. **动态HQL** - 动态HQL允许在运行时构建查询,提高...

    Hibernate-HQL-查询-Query资料

    - **聚合查询**:使用函数如COUNT、AVG、MAX、MIN、SUM进行统计计算。 - **分组查询**:根据一个或多个属性对结果进行分组。 - **排序查询**:通过ORDER BY子句对结果进行排序。 - **关联查询**:处理一对多、一...

    hibernate查询语句--HQL

    HQL 支持常见的聚合函数,如 `avg()`、`sum()`、`min()`、`max()` 和 `count(*)` 等,用于处理结果集中的数据。 ```hql select avg(employee.Salary) from Employee as employee ``` 这条语句计算所有员工的平均...

    Hibernate criteria基本操作

    Criteria API 提供了多种方法来构建复杂的查询,包括添加条件、排序、分页以及使用统计函数等。 1. 创建 Criteria 对象: ```java Criteria criteria = session.createCriteria(Guestbook.class); ``` 这个语句...

    hibernate查询集合.pdf

    在HQL中,我们还可以使用统计函数进行聚合查询。例如,`count(*)`用于计算记录数量,`avg()`计算平均值,`min()`和`max()`分别用于找出最小值和最大值,`sum()`用于求和。例如,`select count(*) from Student`可以...

    课程hibernate查询集合.pdf

    Hibernate Query Language(HQL)是Hibernate框架中用于查询对象关系映射(ORM)的语句,它是面向对象的,与SQL类似但更专注于处理持久化对象。HQL提供了丰富的功能,包括从简单对象检索到复杂的统计计算。 1. **...

    Hibernate数据查询

    Hibernate支持COUNT、AVG、MAX、MIN和SUM等统计函数,可以用于计算总数、平均值等。 7. **缓存机制** 为了提高查询性能,Hibernate使用了二级缓存。一级缓存是Session级别的,自动管理,而二级缓存可以跨Session...

    另类查询 Hibernate HQL 深度历险

    HQL还支持**聚合函数**,如`count`、`sum`、`avg`、`max`和`min`,可以用于计算一组对象的统计信息。例如,`select count(o.id) from Order as o`会返回`Order`对象的总数。**分组函数**则允许根据一个或多个属性对...

    Hibernate Tutorial 09 Hibernate Query Language

    使用 `GROUP BY` 和聚合函数如 `COUNT`、`SUM` 可以执行复杂的分组统计。 ```java Query query = session.createQuery("select count(*) from Book GROUP BY author"); List result = query.list(); ``` ## 六、...

    NHibernate hql 可用函数,函数大全

    - **In 与 Exists 的区别**: `In` 主要用于比较单个值是否存在于列表中, 而 `Exists` 更侧重于判断某个子查询是否有结果返回, 性能上 `Exists` 通常更优。 ### 三、HQL 更新与删除操作 **1. 更新操作** - **语法*...

    Hibernate查询详解

    - `GROUP BY`子句配合统计函数,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`,用于数据汇总和分析。 ### 连接查询 - **内连接(INNER JOIN)** 只返回两个表中匹配的记录。 - **左外连接(LEFT OUTER JOIN...

    hibernate3.2 (十)HQL查询

    4. 聚合函数:HQL支持COUNT、MAX、MIN、AVG、SUM等聚合函数,例如`select count(*) from User`计算User对象的数量。 三、HQL的高级特性 1. 关联查询:HQL支持一对多、一对一、多对多关系的查询,如`from User u ...

    Hibernate HQL.txt

    4. **聚合函数**:HQL支持各种聚合函数,如`AVG()`、`SUM()`、`MIN()`、`MAX()`、`COUNT(*)`等,用于执行分组统计等操作。 ### HQL查询语法详解 #### 1. 连接查询 HQL中的连接查询可以通过`JOIN`关键字实现。例如...

Global site tag (gtag.js) - Google Analytics