在hibernate中执行模糊查询的hql语句其实与sql差不多:from User user where user.visible=1 and user.name like '%xxxxx‘;但是这样做可能会抛出异常,尤其是查询中文关键字的时候,提示信息是%这个符号无法解析。这是因为此时采用的是hibernate3的解析方式。将配置文件中hibernate的解析方式改为2.5版时就不会出现这个问题了,不过改后hibernate批量更新就没法使用了,这样会更麻烦,所以不推荐这种做法。
其实有很简单的做法:提示说%无法解析,是因为把%写入了hql语句,那我们在hql中不写%就可以了,然后将%作为参数传进hql一样可以取得模糊查询的效果。即:
hql = "from School school where school.schoolName like :schoolName ";
return this.getHibernateTemplate().findByNamedParam(hql,
"schoolName", "%" + school.getSchoolName() + "%");
这里的%作为参数以String类型传入hql,这样解析就不会报错了,查询功能就能继续执行下去。