最近在项目中遇到了一个问题,就是做查询的时候,如果用户输入中文的话,明明数据库有这样的记录,却怎么也检索不到结果。作为调试的手段,我把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而很多查询涉及中文的话,最好使用配置文件的方式,简单。