2014-03-07 51 views
0

我有一個字段與類型-SMALLINT(5)在mysql數據庫的表中。字段返回聚合org.hibernate.exception.DataException:無法在休眠中執行查詢

當我嘗試使用投影做一個聚合操作(SUM())在球場上, 我得到下面的異常

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: 
'8.0042892E7' in column '1' is outside valid range for the datatype SMALLINT. 

我理解爲「聚合操作結果顯示在相同的數據類型退回在其中存儲「。我的假設是正確的。

如果是這樣,是否有可能對我來說,返回值轉換爲長值或字符串

+0

顯示hql查詢代碼 – Rembo

回答

2

事實上,你的假設是正確的,即總運算結果返回相同的數據類型的屬性爲存儲。當然,這就是爲什麼你會看到錯誤消息「外部有效範圍」:一個SMALLINT在-32768和32767之間有符號,或者在0和65535之間沒有符號。對於這種數據類型,8.0042892E7遠遠大。

然而有可能的結果強制轉換爲INT:

CAST(SUM(whatever) as INT) 

對於INT範圍爲[-2147483648 2147483647]用於帶符號的整數,併爲無符號[0,4294967295]。

+0

我曾嘗試運行您的建議作爲查詢,它的工作原理,是否有一個等效的方式來寫這使用criteria.setprojection – juan

+0

我從來沒有嘗試過。如果底層數據庫支持,HQL支持CAST。根據http://stackoverflow.com/questions/4269389/using-jpa-2-0-criteria-api-and-cast-causes-generated-jpql-to-fail-in-hibernate使用它與Criteria API失敗至少對於較老的Hibernate版本。 –