hql查询的奇怪问题:生成了同样的SQL,但是查询结果不同

dddeee 2006-04-03 01:02:23
数据库中有一表Member(id,email),已经有一条记录('123','sdf@sfd.com');

使用以下语句查询:

String hql = "select count(*) from Member where email=:email and id!=:id";

List list = this.support.getHibernateTemplate().findByNamedParam(hql,new String[] { "email", "id" },new Object[] { "sdf@sfd.com", null });

System.out.println(list.get(0));

打印结果为0

把其中的new Object[] { "sdf@sfd.com", null });
改为new Object[] { "sdf@sfd.com", "" });
,,结果就为1

我使用p6spy看执行的语句,发现这两句生成的SQL是一模一样的,都是 select count(*) ..... and id<>''

为什么一个能查得出来,一个查不出来???真是奇怪。请各位大哥帮忙
...全文
195 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankh2002 2006-04-03
  • 打赏
  • 举报
回复
select ... and id<>NULL 在HQL中 判断是否为null 都是用 is null or is not null
dddeee 2006-04-03
  • 打赏
  • 举报
回复
对于这个问题,其实生成的两个语句并不一样的,在MYSQL的LOG中,可以看到为""的那个为select ... and id<>'',为null的那个为select ... and id<>NULL

这一点,p6spy结果的日志记录是错误的

NULL值在MYSQL是一个非常特殊的,它表示“不确定”,任何东西与它比较(包括NULL本身)都返回的是NULL,是查不出结果的

67,513

社区成员

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

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