hibernate的like用法(用占位符解決)


原本我的寫法:Query repeatClientQuery=querysession.createQuery("from ClientInfo as a "
                                          +"where a.client_name like :name" );
                repeatClientQuery.setParameter("name",clientname);
查詢無結果.

LIKE 'Mc%' 將搜索以字母 Mc 開頭的所有字符串(如 McBadden)。
LIKE '%inger' 將搜索以字母 inger 結尾的所有字符串(如 Ringer、Stringer)。
LIKE '%en%' 將搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
LIKE '_heryl' 將搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。
LIKE '[CK]ars[eo]n' 將搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
LIKE '[M-Z]inger' 將搜索以字符串 inger 結尾、以從M到Z的任何單個字母開頭的所有名稱如。
LIKE 'M[^c]%' 將搜索以字母 M 開頭,並且第二個字母不是 c 的所有名稱(如 MacFeather)。

直接寫
String sql = "from ClientInfo as a where a.client_name like '%"+ clientname+"%'");
Query repeatClientQuery=querysession.createQuery(sql);
成功.

但是卻不能查詢中文,假如clientname是客戶1名字的話,那么將查不到結構,解決辦法:

1.用占位符:

                  Query query = session
                        .createQuery("select count(*) from Privilege p where p.name like ?");
                query.setString(0, "%" + name + "%");// 注意這里不能寫成setString(0," '%" + name + "%' ";否則查不出來結果,不能加‘單引號

2.修改查詢編譯器:

Hibernate3.0 采用新的基於ANTLR的HQL/SQL查詢翻譯器,在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
為了使用3.0的批量更新和刪除功能,只能選擇(1)否則不能解釋批量更新的語句,當使用的時候出現了不支持條件輸入中文的情況。選擇(2)可以支持輸入中文,但沒法解釋批量更新語句了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM