2KB项目,专业的源码交易网站 帮助 收藏 每日签到

使用自定义用户类型解决Hibernate,DB2,Derby的布尔值转换问题

  • 时间:2019-01-23 18:46 编辑:2KB 来源:2KB.COM 阅读:435
  • 扫一扫,手机访问
  • 分享
摘要:
Hibernate DB2 Apache Derby 英文原文:Using a User Type to Fix Hibernate, DB2, Derby, and Boolean >最近我们的团队开始使用 Derby进行本地开发,然而我们的生产数据库是 DB2。好消息是,这些SQL语句几乎是一样的,可以不用去修改它们。不过,我们还是遇到了问题,就是我们的布尔类型字段。使用的DB2驱动并定义列为char(1),默认情况下,一个布尔对象的默认值为“1”和“0”(或1和0),但是当使用 Derby JDBC驱动程序连接DB2并使用Hibernate时,这些值被翻译为“true”与“false”,这是无法将四个字符保存在一个字符的字段中的。JIRA解释说这种行为实际上是有必要的,就像Derby使用DB2 type2驱动程序代替DB2 type4通用驱动程序。
用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”。

 

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部