java - HSQLDB: count(*) 返回小数

标签 java sql jpa db2 hsqldb

我正在内存中使用 hsqldb 来执行 JUnit 测试,以测试数据访问对象。

在 DAO 中,我使用 JPA 实体管理器启动以下 native SQL 查询:

SELECT COUNT(*) FROM AAA

代码如下所示:

final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA");
return (Integer) query.getSingleResult() == 0;

return 语句让我检查我的计数是否等于 0。 它在生产环境中运行良好(使用 DB2)。

但是在我们的测试环境中,内存中有 hsqldb,它失败了,因为查询没有返回 Integer 或 int,而是返回了 BigDecimal(转换失败)。

使用了 HsqlDB 2.3.0。 之前使用 1.8 版本的 hsqldb 时它运行良好。

你知道为什么会出现这个问题吗?我怎样才能让 count(*) 返回一个整数?

我希望尽可能让生产代码保持不变。因为我已经知道我可以使用 sql 转换来解决这个问题,但在我看来这并不理想:

SELECT cast(COUNT(*) as int) FROM AAA

最佳答案

您可以将 Java 代码更改为独立于平台。将返回值转换为 Number 并使用 getLong() 而不是比较 Integer。

HSQLDB 实际上返回一个 Long,而不是一个 BigDecimal

关于java - HSQLDB: count(*) 返回小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449875/

相关文章:

java - 线程和异常处理

java - Java如何将中间包含逗号的句子分成部分?

mysql - SQL COUNT 查询类似于 UNION 但结果在多个列中

sql - 在sql查询中动态设置数据库

spring - 参数值与预期类型不匹配(Spring Data JPA)

java - 检索 HashMap 的键

java - 过滤器后的渲染器,行不再突出显示

sql - 按已回答所有问题的用户分组

hibernate - JPA/Hibernate 中 key 'PRIMARY' 的重复条目

java - JPA 将属性存储为行