2情况:
1.hibernate获得数据,写入数据库时,是有经过编码的.我们可以在hibernate的配置文件,URL那里进行配置:
这样.hibernate将数据提交给数据库时,就会编码成utf-8
2.hibernate打印出来的带中文的SQL语句中,中文乱码问题.
这里在网上找了几个解决办法:
(2.1)
Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,不过,Hibernate2.1的查询翻译器也依然 存在。在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。例如:
(1)选择Hibernate3.0的查询翻译器:
hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory
(2)选择Hibernate2.1的查询翻译器
hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory
也就是在配置文件仲设置:
<property name="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</property> (PS:我在项目中用的HIBERNATE是3,尝试了3的查询翻译器无效,改用2的查询翻译器,通过.)
(2.2)使用占位符:
- 1.用占位符:
- Query query = session
- .createQuery("select count(*)
- from Privilege p where p.name like ?");
- query.setString(0, "%" + name + "%");//
- 注意这里不能写成setString(0," '%" + name + "%' ";
- 否则查不出来结果,不能加‘单引号