我在内存中使用 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。它在生产环境中工作正常(使用 DB2)。
但是在我们的测试环境中,在内存中使用 hsqldb 时,它会失败,因为查询没有返回 Integer 或 int,而是返回 a BigDecimal
(强制转换失败)。
使用 HsqlDB 2.3.0。之前使用 1.8 版本的 hsqldb 运行良好。
你知道为什么会出现这个问题吗?我怎样才能使count(*)
返回一个整数?
我希望尽可能地让生产代码保持不变。因为我已经知道我可以使用 sql cast 来解决这个问题,但在我看来这并不理想:
SELECT cast(COUNT(*) as int) FROM AAA