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


















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











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

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