閱讀798 返回首頁    go 阿裏雲 go 技術社區[雲棲]


為什麼Hibernate 3中的HQL無法查詢漢字

為什麼Hibernate 3中的HQL無法查詢漢字

使用同樣的代碼和配置文件,在Hibernate 2上完全沒有問題,在Hibernate 3中,使用如下HQL查詢,無法得到正確的結果集:

String hql = "from story where title like '%漢字%'";

Query q = session.createQuery(hql);

但用下麵的HQL查詢,卻可以得到正確結果集:

String hql = " from story where title like '%english%'";

Query q = session.createQuery(hql);

答:如果采用的是拚接HQL的方式,從Hibernate 2升級到Hibernate 3確實會出現漢字亂碼問題。在控製台中可以看到,SQL的漢字部分變成了亂碼:

[DEBUG] 2005-08-14 14:33:58 org.hibernate.SQL - "select story0_.content from story as story0_ where story0_.title like '%&–°é—&&?¨& ?'

在Hibernate中,查詢時應盡量使用占位符的寫法(如下),這樣既可以避免亂碼問題,又可以避免潛在的SQL注入攻擊:

getHibernate().find("from story where title like ? ", "%漢字%")

最後更新:2017-04-02 06:51:32

  上一篇:go magento -- 後台產品列表頁默認隻顯示可見性為“Catalog, Search”的產品
  下一篇:go hibernate HQL 模煳查詢 3種方式