Hibernate在PostgreSQL上执行sum函数导致数据失真的问题
有一段通过Hibernate从PostgreSQL上进行sum统计的简单代码,但统计结果却导致数据失真,不知原因何在,求指教!
Java代码片段如下:
public List<Object> getSalesRanking( ) throws Exception{
StringBuilder sbHql = new StringBuilder();
sbHql.append("select dl.dishId, dl.dishName, sum(dl.counts) as t, sum(dl.price) as s from R311dishList dl ")
.append(" where dl.dishName='松仁玉米'")
.append(" group by dl.dishId, dl.dishName");
String hql = sbHql.toString(); SQLQuery query = sf.getCurrentSession().createSQLQuery(hql);
query.addScalar("dishId", StandardBasicTypes.STRING);
query.addScalar("dishName", StandardBasicTypes.STRING);
query.addScalar("t", StandardBasicTypes.DOUBLE);
query.addScalar("s", StandardBasicTypes.DOUBLE); List<Object> list = new ArrayList<Object>();
ScrollableResults rs = query.scroll();
while(rs.next()){
try{
Object[] obj = new Object[4];
obj[0] = rs.getString(0);
obj[1] = rs.getString(1);
obj[2] = rs.getDouble(2);
obj[3] = rs.getDouble(3); list.add(obj);
}
catch(Exception ex){
String err = ex.toString();
throw ex;
}
}
return list;
}
对应的数据库表R311DishList中相关数据如下:
请注意,要统计的counts字段的数据分别是2.4/2.3/2.6,counts字段是double类型的,按道理sum(counts)后的结果应该是7.3,且通过SQL直接在数据库上执行的结果也确实是7.3,如下图:
可是,通过代码执行得到的结果却是7.299999999999999:
修改数据库中三条记录的counts值为其他值均正常,且偶尔调整三条记录的顺序后也能正常显示。不知何故??
Hibernate在PostgreSQL上执行sum函数导致数据失真的问题的更多相关文章
- Python: 在序列上执行聚集函数(比如sum() , min() , max() )
在序列上执行聚集函数(比如sum() , min() , max() ) eg1: >>>nums = [1, 2, 3, 4, 5]>>>s = sum(x * ...
- MySQL 对window函数执行sum函数疑似Bug
MySQL 对window函数执行sum函数疑似Bug 使用MySql的窗口函数统计数据时,发现一个小的问题,与大家一起探讨下. 环境配置: mysql-installer-community-8.0 ...
- PostgreSQL EXPLAIN执行计划学习--多表连接几种Join方式比较
转了一部分.稍后再修改. 三种多表Join的算法: 一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表 ...
- Struts 2 Spring Hibernate三大框架的执行流程以及原理
Struts2框架 一.简介 Struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架.它基于当年的WebWork和XWork框架,继承其优点,同时 ...
- linq 对Sum()函数的支持
首先看一段SQL语句: SELECT SUM(TASKAPPR) AS APPRCOUNT, SUM(TASKLOCKED) AS LOCKEDCOUNT, SUM(TASKCHECKED) AS C ...
- sum() 函数性能堪忧,列表降维有何良方?
本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/mK1nav2vKykZaKw_TY-rtw Python 的内置函数 ...
- 如何给列表降维?sum()函数的妙用
上个月,学习群里的 S 同学问了个题目,大意可理解为列表降维 ,例子如下: oldlist = [[1, 2, 3], [4, 5]] # 想得到结果:newlist = [1, 2, 3, 4, 5 ...
- register_shutdown_function函数详解--脚本退出时执行回调函数
register_shutdown_function — Register a function for execution on shutdown. ps:Registers a callback ...
- hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying
网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...
随机推荐
- Eclipse 安装使用 M2Eclipse 插件
help --> Install New Software --> Add 安装完后需要重启eclipse 通常 Eclipse 会自带 Maven.但可能按自己安装的 Maven 存在版 ...
- Capacity To Ship Packages Within D Days LT1011
A conveyor belt has packages that must be shipped from one port to another within D days. The i-th p ...
- docker下安装tensorflow
一,查找镜像 root@xushi:~# docker search tensorflow NAME DESCRIPTION STARS OFFICIAL AUTOMATED tensorflow/t ...
- Spring Boot学习笔记:ApplicationEvent和ApplicationEventListener事件监听
采用事件监听的好处 以用户注册的业务逻辑为例,用户在填写完信息表单后,提交信息到后台,后台对用户信息进行处理,然后给用户返回处理结果的信息. 如上图所示,用户在注册时,后台需要处理一些系列流程,实际业 ...
- [ASP.NET]static变量和viewstate的使用方法
在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是 ...
- Python之异常处理和socket套接字连接7
一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...
- KBMMW 4.84.00 发布
kbmMW is a portable, highly scalable, high end application server and enterprise architecture integr ...
- Docker Compose demo 使用
1.docker compose 安装 curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker- ...
- mysql知识积累
验证mysql工作状态 systemctl status mysql.service 启动 sudo systemctl start mysql 停止 service mysql stop 重启mys ...
- Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法
1.在src文件夹上点右键-Build Path-Use as Source Folder,重新进行编译,一切正常了.2.在Eclipse工程文件夹上点右键-Refresh,重新编译,一功OK(这个方 ...