原本我的写法: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)可以支持输入中文,但没法解释批量更新语句了。 文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/2007128/91110.html
Hibernate3的Like用法,解决中文查询问题
最新推荐文章于 2018-05-13 13:44:40 发布