想测试一下将系统部署在postgresql下,下载了8.2的noinstaller.zip包(考察一下免安装数据库的效果),发现仍然不支持以管理员身份启动服务。数据库初始化好以后,启动resin,一访问系统,出错!经检查,发现出错SQL:
ERROR: operator does not exist: boolean = integer。这和hibernate没关系,是sql语句的错误。想起来了,原因是这样的:
我的系统中,对任何数据的操作,都不作物理删除,而是打标记,每个PO均有enabled字段,为boolean类型。对应到不同的数据库中,字段类型也不一样:
oracle为number(1)
sqlserver为bit
mysql为bit
postgresql为bool
hsqldb为boolean
firebird为smallint。
对应的所有hbm.xml文件的关联中,都会加上 where="enabled=1",以保证取出的关联对象和集合是正确的数据。比如下面的:
<set
name="children"
lazy="true"
cascade="none"
sort="unsorted"
order-by="idx,id"
where="enabled=1"
>
<key column="parent_id" >
</key>
<one-to-many class="cn.bidlink.omeng.hbm.menu.SystemMenu"/>
</set>
postgresql的sql语句判断非常严格,不允许写类似enabled=1这样的sql。报错是boolean ==integer,类型匹配错误。但是除了postgresql外,这条SQL在其它所有的数据库上都是允许的。应该说所有的布尔型,最终都是一位bit,或者是0,或者是1,不存在真正的true和false。那么以0和1来作判断,也应该是正确的SQL嘛。
那现在好了,我如果确实需要在pg上部署,那就把所有hbm.xml文件中的where="enabled=1"改为where="enabled=true"好了吧,hibernate应该会自动转化为“enabled=true”这样的sql了吧。但实际情况并不是这样,hibernate会将sql转化为类似
“from object o where o.enabled=o.true”这样的sql,当然是无法正确执行的。经过分析,发现where="enabled=xxx"中,当xxx为数字或字符串时,是能正确解析的,但xxx为true时,则无法正确解析。
这算不算hibernate的一个bug呢?
补充说明:hibernate版本为3.2GA。
后记:发现PG中可以使用bool='true' 或bool='1'来进行正常匹配。
分享到:
相关推荐
该文档主要是针对C#的理解,bool类型在C#中有着极其重要的地位,所以学号bool类型有助C#的理解。
bool类型
bool类型在学习中有着相当重要的地位,好好学习bool可以深化对C#的理解。
pl0中增加bool类型处理支持,解压以后就可以运行,献给为编译奋斗的人们
如果服务器端生成的JSON中有bool类型的数据时,到客户端解析时出现了小小的问题,下面简单为大家介绍下正确的处理方式
C语言中bool类型的使用
要点一:Linq的查找语句可以多个Where条件组合查询,那么只需要传递每个Where的Func,bool>就可以了 要点二:用Tag值来传递Func的内容。ctl.Tag = i => true;
编译原理课设 Bool类型文法 词法语法语义 Java完整代码实现
对string作了一些扩展,包括string转化为int、string转化为double、string转化为bool、打印系统当前时间。但没有解决数据溢出的问题,请大神帮忙解决!
编译原理 课程设计 bool条件语句的编译。按照pascal语句的语法进行编译,设计而成。实现了与或非 大于 小于等优先级的编译
我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真。所以条件判断语句( if(…)、while(…) )非常灵活,甚至一个指针类型都可以是...
pl0 bool 增添 短路处理,编译原理的爱好者
1、类型不同 BOOL为int型 bool为布尔型 2、长度不同 bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节 3、取值不同 bool取值false和true,是0和1的区别 BOOL取值FALSE和TRUE...
自己用C#测试的串口读写三菱PLC,可以对串口进行设置,可以读写单个bool量,批量bool,SingleWord,DoubleWord。可以监测串口连接是否正常,支持多线程读写。
delphi编程里的bool跟boolean类型有什么区别.mht
转化为bool类型时,会变成false的几种数据: 1.整型0 2.空字符串 3.空数组 4.NULL 欢迎补充… 测试代码: <?php function p($title,$mybool){ echo "<pre>".$title; echo var_dump($mybool)."</pre>"; } class...
利用C++实现从std::string类型到bool型的转换。需要的朋友可以过来参考下。希望对大家有所帮助