HSQLDB:count(*)返回小数

时间:2013-10-18 12:37:28

标签: java sql jpa db2 hsqldb

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

在DAO中,我使用JPA实体管理器启动以下本机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

1 个答案:

答案 0 :(得分:1)

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

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