2013-10-18 35 views
2

我在內存中使用hsqldb來執行JUnit測試,以測試數據訪問對象。HSQLDB:count(*)返回小數

在DAO,我使用JPA實體管理器,打開下面的原生SQL查詢:

SELECT COUNT(*) FROM AAA 

的代碼如下所示:

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

return語句讓我檢查我有一個計數等於0. 它在生產環境中正常工作(使用DB2)。

但是在我們的測試env中,hsqldb在內存中失敗,因爲查詢不返回整數或int,但返回BigDecimal(轉換失敗)。

使用HsqlDB 2.3.0。 它在1.8版本的hsqldb之前工作正常。

你知道爲什麼會出現這個問題嗎?我怎樣才能讓count(*)返回一個整數?

我希望儘可能讓產品代碼保持不變。因爲我已知道,我可以解決這個問題與SQL投,但是這不是我的觀點理想:

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

回答

1

可以改變Java代碼是平臺無關的。將返回值轉換爲Number並使用getLong()而不是比較整數。

HSQLDB實際上返回一個Long而不是BigDecimal