日前用JasperReport制作統計報表。
我要從數據庫中Select sum(price) from talbe獲取一些統計數據作為參數傳給JasperReport生成報表。為了達到數據本來應該有的精度,所以在數據庫中price的數據類型為decimal(20,2)。由于只是簡單地從數據庫把price,sum出來并不需要進行更進一步的復雜數據處理,所以在實現中我并沒有為table寫相應該的Pojo和hbm文件。所以在Dao層,我使用Hibernate運行SQL語句將數據檢索出來。代碼如下:


















出現這個原因是說服務器端的數據類型并不能和Java的BigDecimal數據類型成功映射。
推想只要在Hibernate里把本對應的數據類型成功映射起來就可以成功執行了。
解決案如下:
1、新建一個MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect 并在里面補充注冊新的類型映射。如下:











2、把Hibernate里的Dialect改成我們第一步新建的新的Dialect

經過這兩步這后就可以正常使用SqlQuery拿到Sql Server 2005里的decimal類型了。
在SQLServerDialect里的registerHibernateType函數,更詳細的用法請看:
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/dialect/Dialect.html#registerHibernateType(int,%20int,%20java.lang.String)