2007-09-25
Hibernate对boolean判断方式在不同数据库(Postgres和Sql Server2000)下的表现
关键字: postgres Sql Server boolean
用Hibernate在一定程度上可以实现跨数据库,但有些时候还是有些问题的,即使没有涉及到数据库的高级特性.最近开发了一项目,开始是在windwos+sql server2000,而服务器环境是Linux + Postgresql.我们知道sql server下判断boolean类型是写=0或1,而postgresql下呢,判断boolean类型是=false或true.但我们是用hibernate3做中间件来完成映射的.那HQL里应该怎样对boolean类型进行判断呢?
我们以从数据库里查询所有未打上删除标记的文章记录为例,第一种写法:
这种写法在sql server2000下是肯定不能运行的,但postgresql下可以;
再看第2种写法:
这种写法在postgresql下肯定不行,但sql server2000下却可以;
第3种写法:
这种写法在postgresql下和sqlserver2000下都是可以的.
我们得出的结论是:不要在Hql里拼接字符串.
同时也期待新版本的Hibernate能有更好的容错能力.
我们以从数据库里查询所有未打上删除标记的文章记录为例,第一种写法:
find("from Article as t where t.delFlag = false");
这种写法在sql server2000下是肯定不能运行的,但postgresql下可以;
再看第2种写法:
find("from Article as t where t.delFlag = 0");
这种写法在postgresql下肯定不行,但sql server2000下却可以;
第3种写法:
find("from Article as t where t.delFlag = ?",false);
这种写法在postgresql下和sqlserver2000下都是可以的.
我们得出的结论是:不要在Hql里拼接字符串.
同时也期待新版本的Hibernate能有更好的容错能力.
评论
fangang
2007-10-09
我也赞同movingboy的观点,第三种方法已经足够了。第一第二种方法这种不带参数的查询方式是不值得提倡的。
movingboy
2007-09-26
DavyLee 写道
movingboy 写道
最后一种办法不是解决得很好吗?你还期望怎样更好的容错能力呢?
如果第一种和第二种也都正确不是更好吗?
难道第一种和第二种写法不应该正确吗?
既然你要在SQL语句中使用依赖于数据库实现的boolean值,你可以写原生SQL语句,而不是HQL
DavyLee
2007-09-26
movingboy 写道
最后一种办法不是解决得很好吗?你还期望怎样更好的容错能力呢?
如果第一种和第二种也都正确不是更好吗?
难道第一种和第二种写法不应该正确吗?
movingboy
2007-09-26
最后一种办法不是解决得很好吗?你还期望怎样更好的容错能力呢?
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 28103 次
- 性别:

- 来自: 河北

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
深度技术GhostXP专业版V9 ...
还是V8.1版本成熟,速度很快,不错,可以一试!
-- by DavyLee -
2008年7月1日,盖茨离职 ...
不知道你的X年经验是几年,不过你确实缺少一些基础经验...
-- by e-ant -
2008年7月1日,盖茨离职 ...
引用这个是不是因为workspace中有eclipse的配置文件,删除那个.me ...
-- by DavyLee -
2008年7月1日,盖茨离职 ...
强阿我从来不用MyEclipse
-- by 王者之剑 -
2008年7月1日,盖茨离职 ...
引用第五:只要先用myEclipse建立了工作区,即使你把myEclipse卸掉 ...
-- by dogstar






评论排行榜