- 直接写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
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
。。。。
<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
。。。。。。
</props>
</property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>