有关绑定变量的查询问题

guang067 2008-03-06 03:54:22
请教使用Hibernate进行一个查询:
public List getList() {
String hql= "FROM Group group WHERE group.groupName like :groupName";
Query query = getSession().createQuery(hql);
query.setParameter("groupName", "admin");
//以下绑定时也执行不了
//query.setParameter("groupName","admin",Hibernate.STRING);
return query.list();
}
在DB2执行查询时竟然出错。(Oracle , postgres, SQL Server执行都没问题)。
按照相同的SQL语句:select * from grouptable where groupName like 'admin'; 在DB2客户端运行就可以。
在网上查了资料说
“进行查询执行计划时,走的是索引扫描(通过主键),当代入实际值时,显示的全表扫描,后来发现SQL的传入的实参的类型搞错了...”
数据库表grouptable中groupName的类型是varchar.

原因不明!

...全文
65 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guang067 2008-03-07
  • 打赏
  • 举报
回复
大概: FROM Group group WHERE group.groupID <> 0 and ( ? is null or lower(group.groupName) like ?)
而且发现将程序改为:
public List getList() {
String hql= "FROM Group group WHERE group.groupID != 0 and lower(group.groupName) like :groupName";
Query query = getSession().createQuery(hql);
query.setParameter("groupName", "admin");
//以下的也可以了
//query.setParameter("groupName","admin",Hibernate.STRING);
return query.list();
}
在DB2执行通过。
fosjos 2008-03-06
  • 打赏
  • 举报
回复
hibernate不是可以在控制台显示sql吗
把显示的sql拿到db2下执行看看
guang067 2008-03-06
  • 打赏
  • 举报
回复
public List getList() {
String hql= "FROM Group group WHERE group.groupID != 0 and (:groupName is null or lower(group.groupName) like :groupName");
Query query = getSession().createQuery(hql);
query.setParameter("groupName", "admin");
//以下绑定时也执行不了
//query.setParameter("groupName","admin",Hibernate.STRING);
return query.list();
}
在DB2执行查询时竟然出错。(Oracle , postgres, SQL Server执行都没问题)。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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