关于hibernate查询一个非常困惑的问题(中文查询条件转成乱码),求救!

yesjoy 2006-08-21 04:35:41
看看我的方法的写法:
equipName是我传入的查询参数:
String hql = "from EquipmentPO e where e.chineseName like '%"+equipName+"%'";

执行查询语句
Query query = this.getSession().createQuery(hql);
return query.list();

跟踪调试以后发现,如果我输入的查询参数equipName为中文比如“电”,则执行后的查询语句变成:
from EquipmentPO e where e.chineseName like '%??%'

请问有高手能够帮忙解决这个问题么?
声明,我必须使用这种查询方式,QBC可以解决该问题,但是这里需要这样完成。谢谢
...全文
251 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesjoy 2006-08-22
  • 打赏
  • 举报
回复
if (StringUtil.isNotEmpty(equipName)) {
query.setString("likeName", "%电%");
}
不小心提交了
yesjoy 2006-08-22
  • 打赏
  • 举报
回复
多谢楼上的解决办法,不过仍旧出现如下问题,是否跟我的sql语句写法有关系呢?
异常如下:
java.lang.IllegalArgumentException: Parameter likeName does not exist as a named parameter in [from EquipmentPO e where 1=1 and e.id not in (select mp.equipmentPO.id from ManagePurviewPO mp where mp.systemUserPO.id = '402882ac0d1ea474010d1ea48cde000a' or mp.approveState='1') and e.chineseName like:likeName order by e.equipID]

我的程序是这样写的:
...
if (StringUtil.isNotEmpty(equipName)) {
hql += " and e.chineseName like:likeName";
}
Saro 2006-08-21
  • 打赏
  • 举报
回复
hql用"like ?"
然后query.setString(0,"%" + equipName +"%")
Saro 2006-08-21
  • 打赏
  • 举报
回复
老问题了啊
hibernate3用antlr处理含中文的hql字串导致的。
不要拼hql字串,用"like '%?%'"
yesjoy 2006-08-21
  • 打赏
  • 举报
回复
我是跟踪调试的传入的参数没有问题 ,但是跟踪到hql语句以后就成了??了
rickhunterchen 2006-08-21
  • 打赏
  • 举报
回复
只能说equipName在传过来到时候就成??了。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧