1. /**
  2. * @TODO:查询某一年度的所有计划数量
  3. */
  4. public int findCountByYear(String currYear) {
  5. String hqlString = "select count(*) from WaterPlan as p where p.planYear ='"+currYear+"'";
  6. Query query = this.getSession().createQuery(hqlString);
  7. return ((Number)query.uniqueResult()).uniqueResult();
  8. }

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

这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。

Hibernate Team也提供了一个与原来兼容的解决方案:

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

  1. //int count = ((Integer)query.uniqueResult()).intValue();
  2. //改成
  3. int count = ((Number)query.uniqueResult()).intValue();
  4. //这样就可以两个版本同时兼容.
    1. //参考代码
    2. //第一种方法:
    3. String hql = "select count(*) from User as user";
    4. Integer count = (Integer)getHibernateTemplate().find(hql).listIterator().next();
    5. return count.intValue();
    6. //第二种方法:
    7. String hql = "select count(*) from User as user";
    8. return ((Integer)getHibernateTemplate().iterate(hql).next()).intValue();
    9. //第三种方法:
    10. String hql = "select count(*) from User as user";
    11. Query query =  getHibernateTemplate().createQuery( getSession(),hql);
    12. return ((Integer)query.uniqueResult()).intValue();

Hibernate使用count(*)取得表中记录总数的更多相关文章

  1. MS SQLSERVER中如何快速获取表的记录总数

    在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ...

  2. NSIS:在注册表中记录安装路径以便重装或升级时读取

    原文 NSIS:在注册表中记录安装路径以便重装或升级时读取 在NSIS中,这个功能是非常有用的,可以避免用户把程序安装到多个位置的尴尬. 第1步:在“安装目录选择页面”前面加入以下代码: 1 !def ...

  3. oracle数据库误删的表以及表中记录的恢复

    oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...

  4. sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...

  5. SQL迅速增加表中记录语句

    很多时候我么需要为表中疯狂增加N条记录,那么我们该使用什么语句实现该功能呢?如下: insert into 表名(字段1,字段2,字段3....)  select 字段1,字段2,字段3.... fr ...

  6. mysql 删除表中记录

    一.清除mysql表中数据 delete from 表名;truncate table 表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...

  7. 【转】MySQL数据表中记录不存在则插入,存在则更新

    mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问 ...

  8. sql 循环表中记录

    =========================================================================循环排序查询数据=================== ...

  9. 以A表中的值快速更新B表中记录的方法

    1.问题描述 有两张表,A表记录了某些实体的新属性,B表记录了每个实体的旧属性,现在打算用A中的属性值去更新B中相同实体的旧属性,如下图所示: 类似这样的需求,怎样做比较高效呢? 2.制作模拟数据   ...

随机推荐

  1. TextView与Html相结合的具体方法?

    TextView与Html相结合的具体方法? android教程之textview解析带图片的html示例 Android中的TextView,本身就支持部分的Html格式标签.这其中包括常用的字体大 ...

  2. PHP发送邮件的两种方式

    1.用SMTP方式发送邮件.引入phpmailer文件包,然后在文件中 <?php require_once("phpmailer/class.phpmailer.php") ...

  3. Blackfin DSP(二):寄存器操作与GPIO

    BlackfinDSP的寄存器是通过指针操作的,与51.ARM等MCU一样,通过“或”操作来置1,通过“与”操作清零. 在DSP上最简单的外设非IO口莫属,但是由于其功能强大,远非一般IO口可比,因此 ...

  4. oracle工作经验(左右连接、decode)

    oracle左右连接:select a.studentno, a.studentname, b.classname from students a, classes b where a.classid ...

  5. HTML中常用meta整理

    < meta > 元素 定义 meta标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其 ...

  6. Linux VM acquisition

    The evidence is a VM as below. The flat vmdk is the real disk, and the vmdk only 1kb is just a descr ...

  7. CSS子元素居中(父元素宽高已知,子元素未知)

    <style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; l ...

  8. thinkphp实现单图片上传

    $config=array( 'maxSize' => 3145728, 'savePath' => './Public/Uploads/', 'rootPath' => './', ...

  9. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  10. Eclipse下修改工程名

    汇总下网上的方法. 一. 右键工程:Refactor->Rename,或选中工程按F2,修改名称 二. 右键工程:Properties->Web Project Settings,修改Co ...