您当前位置:lerx技术交流
本类热点
推荐阅读
文章正文
Hibernate 中布尔值(boolean)的困感
2012-10-22 19:08:38
lzh

一个网站项目,突然发现出了一点小问题。

某一个栏目,发现内容列表提取不出来。网站有一百多个栏目,就一个取不出来。其它设置均相同,然后研究代码,在服务器上的代码中设断点。sql进行输出。数据库为MySql 5。

 

-!-找到记录

 

Hibernate: select articlethr0_.id as col_0_0_ from site_article_thread articlethr0_ cross join site_article_group articlegro1_ where articlethr0_.articleGroupID=articlegro1_.id and articlegro1_.footerLeft>=2 and articlegro1_.footerRight<=3 order by articlethr0_.topOne desc, articlethr0_.addTime desc limit 1,10

 

-0-找不到记录

Hibernate: select articlethr0_.id as col_0_0_ from site_article_thread articlethr0_ cross join site_article_group articlegro1_ where articlethr0_.articleGroupID=articlegro1_.id and articlethr0_.state=1 and articlegro1_.footerLeft>=2 and articlegro1_.footerRight<=3 order by articlethr0_.topOne desc, articlethr0_.addTime desc limit 1,10

最后发现不相同的地方仅仅是 多了个 articlethr0_.state=1。

将sql直接执行,发现确实取不到记录。

将articlethr0_.state=1改为articlethr0_.state is true。发现取到了值。

见鬼!

Java源码中我是用 is true ,但被hibernate解析成了=1。

百思不得其解,为什么其它栏目却取到而这个取不到。莫非是2和3引起=1无果?但在另一个项目中同样有2和3却无异常。无法想象。

我只有这样解决:

Java代码:

为真:hqlTmp += " where a.state<>0 ";

为否:hqlTmp += " where a.state=0 ";

但这太诡异了!!!