用google搜索该问题后,原来很多人都遇到这样的问题,但没有明确的解决方案。我们能找到的最好的方法,就是使用Hibernate 3.5创建一个自定义的用户类型(基于Hibernate YesNoType),告诉Hibernate注明我们所有的布尔值类型映射到的字段。以下是我们的用户类型的最终代码(基于YesNoType)。
package org.shamalamading.dong; public class OneZeroType extends org.hibernate.type.CharBooleanType { protected final java.lang.String getTrueString() { return "1"; } protected final java.lang.String getFalseString() { return "0"; } public java.lang.String getName() { return "OneZeroType"; } }
然后修改我们的Hibenate实体,使用这种类型,如下:
package org.shamalamading.dong; @Entity @Table(name = "REPORT_TBL") public class Report implements Serializable { @Column(name = "ACTIVE_FLAG", columnDefinition="char(1)") @Type(type="org.shamalamading.dong.OneZeroType") private Boolean active; public Boolean getActive() { return this.active; } public void setActive(Boolean newValue) { this.active = newValue; } }
现在,当持久化到数据库并设置值时,Hibernate将设置“1”为true ,“0”为false。这将更好的让Derby和DB2在一起工作,因为不同的本地驱动处理布尔值不同。另外一个,我觉得有趣的是DB2(或数据库)方面,似乎普遍认同“0”或0代表“false”,但在编程方面,通常认为0来代表“true”,而“其它”表示“false”。