关于在Hibernate里使用select count(*) 返回值的问题说明

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。

如果你从Hibernate 3.0.x/3.1.x升级到最新的hibernate,一定要注意,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();


个人认为有个更好的解决方法,可以利用Number类型来接受返回值,因为Integer Long Double等都是Nuber类的子类,可以通过Number对象实例的对应 intValue() longValue () 等返回自己需要的值。

如下代码:

count = ((Number) this.getList(hql.toString(), argMap, null, null).get(0)).intValue();
		return count;



JPA使用count函数和sum函数 <br />最近在使用JPQL时遇到了一个问题,关于count函数和sum函数不知该如何取值,在网上查了查资料,找到了一种解决方法<br /> <br />具体代码如下:<br /> <br /> <br />public long getObjectsCountByQueryString(String queryString) { <br />        //queryString = "select count(o) from MyModel as o"; <br />         long 阅读详情

相关推荐

【Mybatis】mybatis mysql count(*) 能不能用 Integer 来接收

答案是可以,但你要确保不会溢出,你用byte接收都可以,只要xml面的返回类型(resultType) 同步修改即可。当然还是建议按照统一的标准走(一般都用long),不要这边是integer,那边是Long,频繁的类型转化会非常的痛苦。一般count(*) 接收的方法都是 long型的,那我们用int来接收可以么?编写一个测试类,把对应的类型改成int ,然后观察能够正确的得到结果。进一步测试,使用byte 来接收,且创造一个溢出值。1、可以接收,只要是数字,byte都可以接收。每日一记,好运连连。

weixin_41979605的博客 2371

hibernate中关于对count(*)的查询

今天做项目中,有个统计在线人数的列子,需要从数据库中拿到状态为1的用户数量,所以开始使用count(*)这个函数,但是初学hibernate,犯了好多错误,特此记录下来。public int showCount() { String hql = "select count(*) from users where loginstatus=1"; int count =

wangdashu605435772的博客 4186

jpa page自动生成count语句导致报错

jpa会在执行page方法时自动生成count,而在使用的时候回出错,原因在于他生成的sql存在问题。 解决办法:注解中填写 countQuery 写完整的sql 列如: @Query(value = "SELECT forum_id,f.openid,time,message ,nickname,headimgurl" + " from forum as f LEFT JOIN user u on f.openid=u.openid WHERE f.isdelete=0 and

谎言的舞蹈的博客 2304

hibernate 数据行数统计 count(*)

Hibernate关于sql中的count(*)数据统计: ①如果使用的是HQL: 直接在HQL中使用count(*)即可获取行数 Long count = (Long)HibernateUtil.getSession() .createQuery("select count(*) from Employee") ...

weixin_30467087的博客 770

关于Hibernate select count(*)返回值Long还是Integer?

关于Hibernate select count(*)返回值Long还是Integer? 我这把代码贴一下:  Java code  @Override public int countAllSubject() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); sessi

shen332401890的专栏 6601

mysql count integer_关于Hibernate读取select count(*)返回值到底是Long还是Integer的疑

问题描述:Java code@OverridepublicintcountAllSubject() {Session session=HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction();return((Long) session.createQuery("select count(*) f...

weixin_36059241的博客 725

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

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

流离岁月的博客 7639

关于hibernate执行select count( *) 出现java.lang.ClassCastException问题

代码如下: public int getTotal(String hql,int span) Session sess = sf.openSession(); //sf是Hibernate的session工厂类,它作为spring的受管bean,由spring负责注入 Query q = sess.createQuery(hql); List list = q.list();

cekong0704的专栏 1354

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的专栏 1950

select count(id) from table 返回值

环境说明:       测试数据库为Mysql数据库,其他数据库未知       测试语言为Java       数据库操作使用dbutils包,不知和这个是否有关         select count(id) from table这条SQL语句作用大家都明白什么作用了,本来一直认为返回值为一整形结果,但是试试胜于雄辩。 刚刚在写一个jsp程序,数据库操作使用了dbutils包,使

追求上进的码农 3088

hibernatecount查询

hibernatecount(*)查询,结果集需用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.

菜鸟日记 8107

我就执行一个count(*)为什么这么慢?

前言 今天想看一下我的活动有多少用户参与了,随手执行了一条语句select count(*) from table;我等待几秒钟才出现结果,我不禁陷入了对社会和人生的大思考。 是我太菜吗?不这条语句简单到无法优化,以至于少一个符号就可能报错;是MySQL太笨了吗?用一个变量保存一个总数,每次要查的时候直接返回,不就好了吗? 上面的是真实的故事背景,我们今天就来聊一聊count(*)底层到到底...

不爱学习 1642

Hibernate 如何使用count(*)

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

Aragorn_177的专栏 719

Hibernate 解决SQL count(*)问题.

Hibernate 解决SQL count(*)问题.<br />// 用于hibernate 2.x <br />protected String getCountSql(String originalHql, net.sf.hibernate.SessionFactory sessionFactory) throws Exception { <br />QueryTranslator translator = new QueryTranslator(originalHql);<br />transla

suifeng0117的专栏 2873

hibernate不同版本 count() 返回类型不一样

[quote] 希望大家使用Hibernate比较熟悉的人,确认一下,大家随意使用 count(*) 然后读取看看,到底是Integer,还是 Long [/quote] --------- [quote] 关于在Hibernate使用select count(*) 返回值问题说明 由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改...

aguu125的博客 253

关于Hibernate读取select count(*)返回值到底是Long还是Integer

hibernate2 是int的,hibernate3.0开始我都用long了 DB2是返回java.lang.Long MySQL返回java.math.BigInteger

牛仔不肥的笔记 3589

Hibernate使用count(*)取得表中记录总数

Java代码   /**   * @TODO:查询某一年度的所有计划数量   */  public int findCountByYear(String currYear) {      String hqlString = "select count(*) from WaterPlan as p where p.planYear ='"+currYear+"'";      Que

shixiaoguo90的专栏 9599

hibernate学习』hibernate最原始的方法取得count(*)

[code="java"] Hibernate 如何使用count(*) public int getCount(String emailGroupId, String emailBatchId) throws HibernateException { Session session = HibernateUtil.currentSess...

BaiDaiCEO的专栏 314
上一篇: github构建自己的代码库
下一篇: Spring 3.0.5 整合出现的问题
LowKeySk
博客等级 码龄15年 21粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值