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


















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











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

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