query.uniqueresult

吉云

今天遇到一个特郁闷的事儿,我在整一个项目的时候,需要用 Hibernate 查个东西,就那个数据库里的数据条数,我寻思这还不简单?直接上不就完事!

结果,啪一下,报错,很快!我一看,这不对劲,仔细瞅瞅错误信息,原来是类型转换出问题。我这想当然的以为uniqueResult()返回的是个整数,直接就给强转成 Integer ,结果人家返回的根本不是那么回事儿!

实践过程

query.uniqueresult

我是这么写的:


//错误写法

Integer count = (Integer) *();

query.uniqueresult

我当时还挺自信,觉得这代码肯定没毛病,结果运行起来直接给我报个类型转换异常,我当时就懵。

后来我去网上查查资料,好家伙,原来uniqueResult()这玩意儿,返回的结果类型还挺多变的。

  • 如果是用 SQLQuery 查询,它返回的可能是个 BigDecial 类型的数字。
  • 如果是普通的 Query 查询,那返回的类型就得看你具体查的是啥。
  • query.uniqueresult

我这才反应过来,我这直接强转成 Integer,能不出错吗?

解决方法

找到问题,解决起来就简单多,我把代码改改:


query.uniqueresult

//正确写法

Long count = ((Number) *()).longValue();

这回我学聪明,先把uniqueResult()返回的结果转成 Number 类型,然后再调用它的longValue()方法,转成 long 类型,这下总算没问题!

或者更稳妥一些,可以先判断一下是否为空:

query.uniqueresult


Object result = *();

Long count = 0L;

if (result != null) {

count = ((Number) result).longValue();

query.uniqueresult

这么一改,程序跑起来顺畅多,再也不报那个类型转换的错误。我也算是吃一堑长一智,以后再用uniqueResult()的时候,可得小心着点,不能再想当然的直接强转。

这事儿也给我提个醒,写代码这事儿,还是得多细心,多看看文档,不能光凭经验想不然容易出各种奇奇怪怪的问题。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]