我使用的是 Hibernate,但做了一个简单的 SQLQuery,所以我认为这归结为一个基本的 JDBC 问题。我的生产应用程序在 MySQL 上运行,但我的测试用例使用内存中的 HSQLDB。我发现 SELECT COUNT 操作从 MySQL 返回 BigInteger,但从 HSQLDB 返回 Long。
MySQL 5.5.22 HSQLDB 2.2.5
我想出的代码是:
SQLQuery tq = session.createSQLQuery(
"SELECT COUNT(*) AS count FROM calendar_month WHERE date = :date");
tq.setDate("date", eachDate);
Object countobj = tq.list().get(0);
int count = (countobj instanceof BigInteger) ?
((BigInteger)countobj).intValue() : ((Long)countobj).intValue();
返回类型的这个问题否定了其他 SO 问题的答案,例如在 hibernate 中使用 createSQLQuery 获取 count(*)?建议用于setResultTransformer
将返回值映射到 bean。bean 的类型必须是 BigInteger 或 Long,如果类型不正确则失败。
由于担心数据库互操作性,我不愿意在我的 SQL 的 'COUNT(*) AS count' 部分使用强制转换运算符。我意识到我已经在使用createSQLQuery
,所以我已经超出了 Hibernates 尝试数据库中立性的范围,但是之前在数据库约束方面遇到了 MySQL 和 HSQLDB 之间的差异
有什么建议吗?