最近在項目中遇到了一個問題,就是做查詢的時候,如果用戶輸入中文的話,明明數據庫有這樣的記錄,卻怎么也檢索不到結果。作為調試的手段,我把hql語句打印出來,也沒有發現什么問題,和預期的一樣。甚是郁悶,后來,上網查了一下資料,原來是hibernate3對中文的支持不是太好,需要在hibernate的配置文件中添加一個屬性,(這里使用了spring的IOC容器來注入)
<property name="hibernateProperties">
<props>
<prop key="hibernate.query.factory_class">
${hibernate.query.factory_class}<!--添加這個屬性就可以了-->
</prop>
........................
</property>
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
原因時hibernate在把hql轉換成sql語句的時候,出現了亂碼(如果有中文的話),按以上的配置的話,就沒有什么問題了。還有一個方法就是,使用預編譯的hql,然后動態綁定參數。不過這個方法是針對這一個函數本省而言的,如果你是使用Hibernate3而很多查詢涉及中文的話,最好使用配置文件的方式,簡單。