今天碰到一个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;
}
}
分享到:
相关推荐
`uniqueResult()`方法将返回`COUNT`函数的结果。 其次,`AVG`函数用于计算平均值。假设我们有一个`Salary`字段,想要计算所有员工的平均工资: ```java Query query = session.createQuery("SELECT AVG(salary) ...
投影用于获取特定列,而聚合函数(如COUNT, SUM, AVG等)用于统计。例如: ```java // HQL query = session.createQuery("select count(u) from User u"); // Criteria ProjectionList projections = ...
HQL提供了如count、sum、avg、max、min等聚合函数,用于统计和计算。例如,获取User表中最大的年龄: ```java String hql = "select max(age) from User"; Object maxAge = query.uniqueResult(); ``` 四、HQL分组...
- **GROUP BY子句**:用于分组,常与聚合函数(如COUNT、SUM等)一起使用。 - **JOIN操作**:HQL支持内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN等)。 3. **HQL的高级特性** - **集合查询**:HQL可以...
- 统计函数:如COUNT、SUM等。 #### 6. 如何优化Hibernate? - 使用适当的关联类型和策略。 - 合理配置缓存策略。 - 减少不必要的字段,合理设计数据库结构。 - 使用适当的集合类型。 #### 7. Struts 工作机制及...
- 使用`SUM()`函数来计算每个顾客在指定时间段内的消费总额。 - `GROUP BY`子句按顾客ID分组结果集。 #### 五、Native SQL实现多表联合查询 有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的...
- HQL提供了如`count()`、`max()`、`min()`、`avg()`、`sum()`等聚合函数,用于统计分析。 - 例如,`select count(e) from Employee e`可以计算员工总数。 7. **动态HQL** - 动态HQL允许在运行时构建查询,提高...
- **聚合查询**:使用函数如COUNT、AVG、MAX、MIN、SUM进行统计计算。 - **分组查询**:根据一个或多个属性对结果进行分组。 - **排序查询**:通过ORDER BY子句对结果进行排序。 - **关联查询**:处理一对多、一...
HQL 支持常见的聚合函数,如 `avg()`、`sum()`、`min()`、`max()` 和 `count(*)` 等,用于处理结果集中的数据。 ```hql select avg(employee.Salary) from Employee as employee ``` 这条语句计算所有员工的平均...
Criteria API 提供了多种方法来构建复杂的查询,包括添加条件、排序、分页以及使用统计函数等。 1. 创建 Criteria 对象: ```java Criteria criteria = session.createCriteria(Guestbook.class); ``` 这个语句...
HQL还支持使用统计函数进行查询,如`count()`、`min()`、`max()`、`sum()`和`avg()`。这些函数可以对查询结果进行聚合计算。 **示例代码**: - **计数查询**: ```csharp Query query = session.CreateQuery(...
在HQL中,我们还可以使用统计函数进行聚合查询。例如,`count(*)`用于计算记录数量,`avg()`计算平均值,`min()`和`max()`分别用于找出最小值和最大值,`sum()`用于求和。例如,`select count(*) from Student`可以...
Hibernate Query Language(HQL)是Hibernate框架中用于查询对象关系映射(ORM)的语句,它是面向对象的,与SQL类似但更专注于处理持久化对象。HQL提供了丰富的功能,包括从简单对象检索到复杂的统计计算。 1. **...
Hibernate支持COUNT、AVG、MAX、MIN和SUM等统计函数,可以用于计算总数、平均值等。 7. **缓存机制** 为了提高查询性能,Hibernate使用了二级缓存。一级缓存是Session级别的,自动管理,而二级缓存可以跨Session...
HQL还支持**聚合函数**,如`count`、`sum`、`avg`、`max`和`min`,可以用于计算一组对象的统计信息。例如,`select count(o.id) from Order as o`会返回`Order`对象的总数。**分组函数**则允许根据一个或多个属性对...
- **In 与 Exists 的区别**: `In` 主要用于比较单个值是否存在于列表中, 而 `Exists` 更侧重于判断某个子查询是否有结果返回, 性能上 `Exists` 通常更优。 ### 三、HQL 更新与删除操作 **1. 更新操作** - **语法*...
使用 `GROUP BY` 和聚合函数如 `COUNT`、`SUM` 可以执行复杂的分组统计。 ```java Query query = session.createQuery("select count(*) from Book GROUP BY author"); List result = query.list(); ``` ## 六、...
- `GROUP BY`子句配合统计函数,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`,用于数据汇总和分析。 ### 连接查询 - **内连接(INNER JOIN)** 只返回两个表中匹配的记录。 - **左外连接(LEFT OUTER JOIN...
4. 聚合函数:HQL支持COUNT、MAX、MIN、AVG、SUM等聚合函数,例如`select count(*) from User`计算User对象的数量。 三、HQL的高级特性 1. 关联查询:HQL支持一对多、一对一、多对多关系的查询,如`from User u ...
4. **聚合函数**:HQL支持各种聚合函数,如`AVG()`、`SUM()`、`MIN()`、`MAX()`、`COUNT(*)`等,用于执行分组统计等操作。 ### HQL查询语法详解 #### 1. 连接查询 HQL中的连接查询可以通过`JOIN`关键字实现。例如...