2012-06-12 50 views
3

我有MySQL InnoDB表utf-8編碼。此表只有ID和名稱字段。爲了測試目的,名稱使用俄語和英文名稱。英文名稱選擇確定,但當試圖用俄文名稱選擇時,它會返回空列表。我試圖用Criterion和HQL構建查詢。休眠沒有任何選擇

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

這裏是連接字符串 - ?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf8

我使用休眠3.2.7.ga春季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 ? 
+0

你測試了沒有characterEncoding參數嗎? – Perception

+0

是的,但它仍然出現問題。 –

+0

您是否在mysql中手動嘗試過,看看數據庫是否返回任何內容? – Woody

回答

3

感謝所有,我已經找到了答案。

問題出在連接字符串。 我做了重構,並將連接字符串移動到屬性文件,而不是與spring-bean的xml。但我沒有將「&」實體更改爲「&」。 全成連接字符串屬性文件中

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

XML文件更改&實體正確的,但性能格式不這樣做。

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

你試過這個休眠標準嗎?
其中「會話」將會生成會話的會話對象。
1)共類=「POJO類名」
2)strColumnName =「POJO類字段名稱」在你的情況下,將「名稱」我想
3)strColumnValue =在您的情況下,將「ИННА」

+0

我也嘗試過這種方式,但沒有幫助。 –

0

您是否嘗試在數據庫級別更改字符編碼? 據MySQL文檔,西裏爾字母與「CP1251」

支持您可以看看this link以及

+0

是的,數據庫表和字段採用UTF-8編碼和utf8_ci整理。 –

+0

您是否嘗試使用以下命令定義您的查詢:session.createSQLQuery(...)?因爲這可以讓你使用「本地查詢」,所以至少應該能夠確定問題的實際位置:在數據庫端或Hibernate如何生成基礎查詢 – kyiu

+0

KHY,謝謝!我已經得到了答案。 –