2011-08-30 52 views
2

我已經使用HQL修復了我的問題,它工作得很好。什麼是Hibernate相當於Projections.Cast?

但我喜歡Criteria API。 (我在我的querybuilder字符串中有幾個ifs語句用於HQL,yuck) 顯然Projections.sum(property)返回double。

我的實體類有

@Column(name = "current_volume") 
private Integer currentVolume; 

我得到的錯誤是

org.hibernate.PropertyAccessException:同時呼籲se.unox.pejl.entity.value.pejl的二傳手發生IllegalArgumentException異常。 PejlDataTrendValue.currentVolume。

我等效工作HQL是

select cast(sum(p.currentVolume/1000) as integer) as currentVolume from  
se.unox.pejl.entity.value.pejl.PejlDataTrendValue as p 

我想我知道問題是什麼,但無法弄清楚如何投欄的總和(這是INT(11)在MySQL)爲整數。顯然,NHibernate的已經Projections.Cast

基於this blog post我使用Hibernate 3.6

回答

2

(除非有什麼東西在3.5和3.6之間變化)的Projections.sum返回類型取決於屬性類型屬性被概括:

對於映射爲Long,Short,Integer或原始整數類型的屬性,返回Long值;

對於映射爲Float,Double或原始浮點類型的屬性,返回Double值。

如果您想覆蓋原生功能,請使用follow the answer in this post

+0

謝謝阿隆!所以它變成了Long而不是我假設的兩倍。難怪我得到例外。實體班已有幾年了,我真的不想改變它。 我正在尋找的是簡單的NHibernate風格鑄造新代碼,我添加,而不是接觸舊的。 我想我會堅持使用HQL。 –

+0

既然如此,嘗試覆蓋在我的答案的底部。 – atrain

+0

當我有我的實體bean與映射的屬性時,我不知道寫在數據庫列名稱(SQL投影)。 –

相關問題