`

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

阅读更多
引用

希望大家使用Hibernate比较熟悉的人,确认一下,大家随意使用 count(*) 然后读取看看,到底是Integer,还是 Long


---------
引用

关于在Hibernate里使用select count(*) 返回值的问题说明
由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 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();



-----推荐的解决
引用

   Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Number number=((Number) session.createQuery(
        "select count(*) from Post where idParent=0").iterate().next());
    return number.intValue();


因为无论是Long还是Integer,还是BigInteger,它们都是Number的子类,所以用Number去cast这个结果是肯定不会错的,然后,最好定义在Number里面这些方法可以统一的返回需要的类型;

byte byteValue()
  以 byte 形式返回指定的数值。
abstract double doubleValue()
  以 double 形式返回指定的数值。
abstract float floatValue()
  以 float 形式返回指定的数值。
abstract int intValue()
  以 int 形式返回指定的数值。
abstract long longValue()
  以 long 形式返回指定的数值。
short shortValue()
  以 short 形式返回指定的数值。


=====================================================
java.lang
类 Number
java.lang.Object
  java.lang.Number
所有已实现的接口:
Serializable
直接已知子类:
AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short 
分享到:
评论

相关推荐

    Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip

    这个问题在"Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip"这个压缩包中被提及,表明其中可能包含了针对这种兼容性问题的解决方案。 首先,我们需要理解为什么新版本的JDK可能导致与Hibernate的不兼容性。...

    hibernate 4.3.10 版本的笔记

    - **Hibernate配置**: 在配置Hibernate时,注意`hibernate.hbm2ddl.auto`属性的设置,它可以设置为`create`、`update`、`create-drop`和`validate`等不同值,分别表示不同的数据库表同步策略。 通过以上步骤和细节...

    spring-hibernate 4个版本

    - 兼容性增强:新的Spring-Hibernate版本可能增加了对不同版本的Spring或Hibernate的兼容性。 - 错误修复:每个里程碑版本之间的差异可能包括修复了前一版本中发现的问题或漏洞。 - 新特性:新版本可能引入了对特定...

    hibernate各个版本下载地址

    ### Hibernate各版本简介与下载地址 #### 概述 Hibernate是一款开源的对象关系映射(ORM)框架,它为Java应用程序提供了强大的数据持久化支持。通过将对象模型与数据库模型进行映射,Hibernate能够极大地简化...

    hibernate新版本

    例如,Hibernate 4.x版本引入了JPA 2.1规范的支持,提供了更好的类型安全的查询API(Criteria API)。 2. **API变更**:新版本可能会对API进行调整,包括接口方法的增删改,这可能需要开发者更新代码以适应新版本。...

    Hibernate4.0,Hibernate5.2,Hibernate5.6 jar包

    这个压缩包包含了Hibernate的三个不同版本:4.0、5.2和5.6,每个版本都有对应的jar包。 首先,让我们详细了解一下Hibernate4.0。在这一版本中,Hibernate引入了一些重要的改进和新特性。例如,对JPA 2.0规范的全面...

    Hibernate 框架测试版本

    **Hibernate 框架测试版本** Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种方便的方式来操作数据库。这个“Hibernate 框架测试版本”包含了一个简化的示例,旨在帮助初学者了解并...

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    在使用Hibernate进行数据库操作时,有时会遇到一个常见的问题,即当从数据库中查询Date类型的数据并由Hibernate返回时,发现结果中的时分秒部分不正确。这个问题通常源于多个因素,包括日期时间的序列化与反序列化...

    JAVA数据类型与Hibernate的类型映射

    例如,int型在Hibernate中通常映射为Integer类型,因为数据库字段可能允许为空(NULL),而Java的基本类型不能是NULL。同样,boolean型在Hibernate中映射为Boolean,double映射为Double,String映射为String,等等。...

    hibernate操作数据库笔记

    //该方法会立即加载/获取数据(只要调用该方法就会立即向数据库发出查询语句),该方法只在内部缓存查找数据,如果内部缓存中没有数据就直接去数据库查询,当数据库中没有要查询的数据时返回null (6).load(Class ...

    Hibernate中,利用版本管理机制来控制事务并发

    2. 事务隔离级别:Hibernate的版本管理机制与数据库的事务隔离级别相结合,可以实现不同级别的并发控制。例如,在可重复读(Repeatable Read)隔离级别下,虽然能防止脏读,但可能会出现幻读,此时版本管理机制可以...

    hibernate的中三种版本的cglib.jar

    标题中提到的"hibernate的中三种版本的cglib.jar"是指Hibernate在不同阶段所依赖的CGlib库的不同版本。接下来,我们将深入探讨这三个版本及其特点: 1. **cglib-2.1.3**: 这是CGlib的一个较早版本,发布于2005年...

    hibernate-release的5.0.7版本和最新的5.3.6版本

    本文将详细探讨Hibernate 5.0.7和5.3.6这两个版本之间的差异,以及它们各自的特点。 在 Hibernate 5.0.7 版本中,这是一个相对稳定且广泛使用的版本。该版本主要提供了以下关键特性: 1. 改进了对JPA 2.1规范的支持...

    Hibernate使用——自定义数据类型

    本篇文章将深入探讨如何在Hibernate中实现自定义数据类型。 首先,我们需要理解Hibernate是如何处理数据类型的。默认情况下,Hibernate使用Java的标准数据类型来映射数据库中的列。例如,Integer对应INT,String...

    hibernate5.2版本配置和映射dtd文件

    5. `<one-to-one>`, `<many-to-one>`, `<one-to-many>`, `<many-to-many>`:定义不同类型的关联关系。 例如: ```xml <hibernate-mapping package="com.example"> ... </hibernate-mapping> ``` ...

    达梦 Hibernate 方言 2.0 至 4.0

    1. **SQL兼容性**:随着版本的提升,方言对达梦数据库的SQL语法支持更加完善,确保了在不同版本的Hibernate中,开发者可以编写出符合达梦数据库特性的SQL语句。 2. **事务管理**:在新版本的方言中,对事务的处理...

    hibernate最新版本5.2.3所有jar包

    - Hibernate的`hibernate-types`库可能包含了一些自定义类型的实现,比如日期时间类型、JSON类型等,使得数据库字段类型与Java类型之间的转换更加灵活。 8. **事件和拦截器**: - Hibernate支持监听和拦截实体...

    Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表

    这里,我们提到了一个名为“Hibernate的映射类型_hibernate_mysql映射类型.doc”的文档,这很可能是一个详细的对照表,列出了Hibernate如何将Java数据类型映射到MySQL数据库的SQL数据类型。MySQL是世界上最流行的...

    kingbaseV8 hibernate jdbc 驱动

    总结来说,这个压缩包包含了不同版本的Hibernate核心库以及可能的KingbaseV8 JDBC驱动和方言实现,这些组件使得开发者能够利用Hibernate框架高效地在Java应用中操作KingbaseV8数据库。在实际项目中,需要根据项目...

    最新hibernate版本5.2.11final

    最新hibernate 版本5.2.11.final--最新hibe--最新hibernate 版本5.2.11.finalrnate 版本5.2.11.final--最新hibernate 版本5.2.11.final

Global site tag (gtag.js) - Google Analytics