Hibernate什么都不选

时间:2012-06-12 10:19:20

标签: java mysql spring hibernate character-encoding

我有MySQL InnoDB表utf-8编码。该表只有id和name字段。名称为俄语,1个英文名称用于测试目的。英文名称选择确定,但在尝试选择俄语名称时,它返回空列表。我尝试使用Criterion和HQL构建查询。

getHibernateTemplate().find("from FirstName where name='free' ");
getHibernateTemplate().find("from FirstName where name='ИННА' ");

这是连接字符串 - ?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8

我正在使用hibernate 3.2.7.ga和spring 2.5.6.SEC03

这是hibernate日志:

Hibernate: /* from FirstName where name='ИННА'  */ select firstname0_.`id` as id1_24_, firstname0_.`name` as name2_24_ from `first_name` firstname0_ where firstname0_.`name`='ИННА' limit ?

3 个答案:

答案 0 :(得分:3)

感谢所有人,我找到了答案。

问题出在连接字符串中。 我做了重构并将连接字符串移动到属性文件而不是带有spring-bean的xml。但我没有将“&”实体更改为“&”。 成功连接字符串位于属性文件

jdbc:mysql://${host}:${port}/${database}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

XML文件将&个实体更改为正确但属性格式不会这样做。

答案 1 :(得分:0)

Criteria coCriteria = Session.createCriteria(coClass).add(Restrictions.eq(strColumnName, strColumnValue));
list = coCriteria.list();

您是否尝试过这种休眠标准 其中“Session”将是hibernate生成会话的会话对象 1)coClass =“pojo class name”
2)strColumnName =“pojo class field name”在你的情况下它将是“name”我猜 3)strColumnValue =在你的情况下它将是“ИННА”

答案 2 :(得分:0)

您是否尝试在数据库级别更改字符编码? 根据MySQL文档,“cp1251”

支持西里尔字符

您也可以查看this link