為什麼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