Java HSQLDB:count(*)返回一个小数
我在内存中使用hsqldb来执行JUnit测试,测试数据访问对象 在DAO中,我使用JPA实体管理器启动以下本机SQL查询:Java HSQLDB:count(*)返回一个小数,java,sql,jpa,db2,hsqldb,Java,Sql,Jpa,Db2,Hsqldb,我在内存中使用hsqldb来执行JUnit测试,测试数据访问对象 在DAO中,我使用JPA实体管理器启动以下本机SQL查询: SELECT COUNT(*) FROM AAA 代码如下所示: final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA"); return (Integer) query.getSingleResult() == 0; return语句允许我检查计数是否等于0。 它在
SELECT COUNT(*) FROM AAA
代码如下所示:
final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA");
return (Integer) query.getSingleResult() == 0;
return语句允许我检查计数是否等于0。
它在生产环境中运行良好(使用DB2)
但是在我们的测试环境中,当hsqldb在内存中时,它失败了,因为查询不返回整数或int,而是返回一个BigDecimal
(转换失败)
使用HSQLDB2.3.0。
它在1.8版本的hsqldb中工作得很好
你知道为什么会出现这个问题吗?如何使计数(*)
返回整数
我想,尽可能让生产代码保持不变。因为我已经知道我可以通过sql强制转换解决这个问题,但在我看来这并不理想:
SELECT cast(COUNT(*) as int) FROM AAA
您可以将Java代码更改为独立于平台。将返回值强制转换为Number,并使用getLong()而不是比较整数 HSQLDB实际上返回一个长十进制,而不是一个大十进制