Hibernate中的count聚合函数:是Integer还是Long?

HQL入门与实战:面向对象的Hibernate查询语言 HQL(Hibernate Query Language)是一种面向Java实体类的ORM查询语言,其核心原理是将开发者对领域对象的操作自动翻译为适配不同数据库的原生SQL。相比传统SQL,HQL提供编译期类型安全、数据库无关性及延迟加载集成等技术价值,显著降低DAO层维护成本。它适用于以CRUD为主、强调可维护性的企业级Java应用,尤其在Spring Boot + JPA技术栈中承担着统一数据访问语义的关键角色。本文围绕HQL语法规范、命名参数绑定、JOIN FETCH优化及常见性能陷阱展开,覆盖从基础 阅读详情

最近在上课的时候发现一个问题,其实这个问题很早以前就发现了。不过以前也懒得去理它,最近想想找找原因吧。就是我用HQL查询数据库的时候,sj写如下语句:
 

public int getCount() {
	Session session = super.getSession();
	int count = (Integer) session.createQuery("select count(h) from House h").uniqueResult();
	session.close();
	return count;
}


上课演示的时候没有任何问题,而不少同学在写相同代码的时候,却出现如下异常:

org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer


这意思是就不能将Long类型转成Integer类型

后来发现问题所有,原来是Hibernate版本的问题,我上课用的是Hibernate3.0,而多数同学用的是Hibernate3.3
上网找了下答案,如下:
经确认从3.2以后,Hibernate已经把以前返回 Integer的改成了 Long, 因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。 如果你从Hibernate 3.0.x/3.1.x升级到最新的3.2版,一定要注意,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。 
这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。 
Hibernate Team也提供了一个与原来兼容的解决方案: 

Configuration classicCfg = new Configuration(); 
classicCfg.addSqlFunction( "count", new ClassicCountFunction()); 
classicCfg.addSqlFunction( "avg", new ClassicAvgFunction()); 
classicCfg.addSqlFunction( "sum", new ClassicSumFunction()); 
SessionFactory classicSf = classicCfg.buildSessionFactory();


希望对大家有帮助。

从零开始学习AI人工智能本体论:概念与实战 本文旨在为初学者提供一个全面而易于理解的人工智能本体论入门指南。我们将覆盖从基本概念到实际应用的全过程,帮助读者理解本体论在AI系统中的核心作用。核心概念与联系:介绍本体论的基本概念和原理核心算法与操作步骤:详细讲解本体构建和推理方法项目实战:通过实际案例展示本体论的应用实际应用场景:探讨本体论在不同领域的应用未来发展趋势:展望本体论在AI领域的前景本体论(Ontology): 在AI中,指对特定领域概念及其关系的明确形式化描述。 阅读详情

相关推荐

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6574

Hibernate 如何使用count(*)

 public int getCount(String emailGroupId, String emailBatchId)            throws HibernateException ...{        Session session = HibernateUtil.currentSession();        Transaction tx = session.

MiTKooK's Tech Log 8750

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 203

hibernate:count查询

用hibernate做count(*)查询,结果集需用createSQLQuery() String sql="SELECT COUNT(1) " + " from Test_Classinfo a,Test_Student b,TestStudent_Question c " + " where a.testId=b.testId " + " and b.id=c.

菜鸟日记 8109

(南京观海微电子)——TCON介绍

TCON又称:逻辑板,控制板,在液晶电视里的作用和CRT中的视放板相当,但有本质的区别,逻辑板不是一个纯粹的信号放大器,它输入是LVDS格式信号,而不是RGB。逻辑板的作用是把数字板送来的LVDS或TTL图像数据信号,时钟信号进行处理移位寄存器存储将图像数据信号,时钟信号转换成屏能够识别的控制信号行列信号RSDS控制屏内的MOSFET管工作而控制液晶分子的扭曲度。目前国内主要的TCON板生产商有视显光电。传统TCON的布局主要分为以下两种:X+C分离式和X+C一体式。

m0_75095200的博客 3834

华为OD机试 - 进制转换 - 二进制(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 916

hibernate count

最近开始学习和更多的使用hibernate了,yi

liyang_hawk的专栏 914

【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式

在工作中我们会遇到需要冻结原理图进行评审和加密图纸防止被他人盗用的需求。那么在OrCAD Capture中如何对图纸进行锁定与解锁,如何在Allegro中对PCB工程进行加密呢?

一点硬件 3255

hibernate 中的count(*) 、group by 、group by having

之前的一篇文章中我们也看到了count(*) 方法,这里我们来学习count(*)  和group by 的查询! 一、hql方式实现 1、使用hql语句来实现count(id) /count(*)  Query query= session.createQuery("select count(*) from Event"); int count= ((Numbe

bit-cafe 1万+

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4594

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

Hibernate 函数 ,子查询 和原生SQL查询

Query的list()方法返回的集合包含2个Object[]对象数组类型的元素,每个对象数组对应查询结果中的一条记录,数组的第一个元素是。Query的list()方法返回的集合包含2个Object[]对象数组类型的元素,每个对象数组对应查询结果中的一条记录,数组的第一个元素是。Query的list()方法返回的集合中包含3个Object[]对象数组类型的元素,每个对象数组对应查询结果中的一条记录,数组中的第一个元。maxIndex()和maxIndex:对于建立了索引的集合,获得最大的索引。

omygodvv的博客 761

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

Hibernate(select count(*))

关于在Hibernate里使用select count(*) 返回值的问题说明 由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改成了 Long, 因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。 如果你从Hibernate 3.0.x/3.1.x升级到最新的3.2版,一定要注意,3.2版的很多sql函数如co

Y_Ber的专栏 1951

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hibernate3.2以后版本 聚合函数返回Long类型

hibernate3.2以后的版本中,聚合函数比如count(*) 返回的类型是 Long 类型的,不能直接转化成 Integer类型,这样挺郁闷的,有1个办法可以解决,举例:   public Integer count(final Integer userId) { return ((Number) getHibernateTemplate().find("select count(id...

iteye_20332的博客 254

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于Hibernate查询count时的返回值类型

由于接触Hibernate较晚, 一直坚定不移的相信select count(*) 的返回值的类型的是Long. 一次很偶然的机会发现在一段分页函数里发现在使用select count(*)之后拿到的对象,居然先判断是Long类型还是Integer类型。心中大惊,总不会是在不同的数据库里它的表示不一样吧,不找出原因心难安。 在csdn上看到有人提出类似问题。其中提到 关于在Hibernat

Max Lee的专栏 4890

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Hibernate 执行SQL语句的count函数返回BigDecimal类型

   当前使用的Hibernate版本是3.2.6,数据库是Oracle11g,当使用 HibernateTemplate 的execute方法执行sql语句(不是 hql 语句)查询的时候,使用count聚合函数,返回结果是 BigDecimal 类型,不是Integer也不是Long,需强转成 BigDecimal 类型,然后调用其对象的 intValue 或 longValue 方法就可以...

1039

Hibernate-hibernate 中 Long 与 int 的转换

hibernate 中使用聚合函数 count 查询记录数时,返回值类型为 Long ,若强行转换则会出现 java.lang.ClassCastException 异常, 正确写法应使用 Number 类型作为过渡则不会出错。 错误写法: @Override public int findCountByCid(Integer cid) { String hql = "SEL

u011705958的博客 2204

Hibernate select count(*)返回值类型Integer vs Long

COUNT 返回Long对象 MAX MIN 返回类型是跟所使用的字段类型有关 AVG 返回Double SUM 如使用字段是整形,返回Long(以前是返回BigInteger),如果是浮点类型那么就返回Double.由于接触Hibernate较晚, 一直坚定不移的相信select count() 的返回值的类型的是Long. 一次很偶然的机会发现在一段分页函数里发现在使用select cou

流离岁月的博客 7645

聚合函数count与Criteria的rowCount返回类型的疑惑

在hibernate3.2中为了兼容jpa,hql中聚合函数count的返回类型改成了Long.但是Criteria的rowCount的返回类型还是Integer.为什么不保持一致呢?不是很明白. 而springside的core代码中Criteria的rowCount的返回值使用了Long [code]long totalCount = (Long) criteria.setProj...

如星的口水 417

⚡SimpleDAO 企业实战教程(05) 报表聚合(GROUP BY + 聚合函数)

原生 SQL 报表无限制:GROUP BY、COUNT、SUM、AVG 直接写在 SQL 里,框架不做任何改写、拦截、黑盒处理。能力上限 = SQL 表达的上限。条件类复用:一个ReportCond服务多个统计方法(reportUser),复用性拉满。独立判空:每条条件独立add,各自判空。传开始时间就拼>=,传结束时间就拼<=,传用户名就拼LIKE,什么都不传就全忽略。where()vsand()where()自动带上WHERE关键字适合 SQL 无 WHERE;and()只返回AND。

gzz_gzz的博客 553

Hibernate原生SQL实战:addScalar与addEntity精准映射指南

原生SQL是ORM框架中应对复杂查询、性能瓶颈和数据库特性的关键能力。其核心在于绕过JPQL的抽象层,直接控制执行计划与结果解析。Hibernate通过SQLQuery提供三层能力:裸SQL执行、addScalar类型安全标量映射、addEntity实体自动装配,分别解决DML操作、聚合计算和领域模型复用等场景。技术价值体现在性能提升(如金融聚合快3.7倍)、类型安全(避免ClassCastException)和跨方言兼容(如PostgreSQL JSONB需自定义Type)。典型应用场景包括报表统计、对账

weixin_30839881的博客 433

SSH框架整合用getHibernateTemplate使用聚合函数如sum(),count()

public int sumleave(int sid) { Object o = this.getHibernateTemplate().find("select sum(c.leave) from Check c").get(0); return ((Long)o).intValue(); //注意一条记录返回的Object对象,不能转为Integer, 只为转为Lo

1148

java.lang.Integer cannot be cast to java.lang.String

以下一段代码: public int getByItemCount(int itemid) throws Exception {  // TODO Auto-generated method stub  int count=0;  String hql="select count(q.qid) from Question as q where q.itemid=?";  Query q=supe...

yan 705

Hibernate 本地SQL查询的简单使用

  StringBuilder sb = new StringBuilder("SELECT PR.ID,PR.LOG_TITLE,PR.DOG_INFO,DI.NAME,(CASE WHEN PL.TOTAL &gt; 0 THEN PL.TOTAL ELSE 0 END) AS TOTAL"); sb.append(" FROM...

困难户 158

Spring Data JPA动态查询:JpaSpecificationExecutor详解

JPA规范作为Java持久层标准,其动态查询能力是解决复杂业务筛选的关键技术。通过Criteria API实现的类型安全查询构建,避免了传统SQL拼接的安全风险。JpaSpecificationExecutor接口基于领域驱动设计的Specification模式,将查询条件对象化,支持条件复用与灵活组合。在后台管理系统、数据分析报表等需要动态构建查询的场景中,该技术能显著提升代码可维护性。结合N+1查询优化、二级缓存配置等工程实践技巧,可构建高性能的数据访问层。Spring Data JPA 4.0引入的P

weixin_34242509的博客 426
上一篇: JavaScript中三个点的语法案例
夜光寒
博客等级 码龄23年 127粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值