前言
注意:人大金仓数据库是一款基于PostgrelSQL开发的国产数据库,它的命令行、配置文件以及各种使用上都有PGSQL的影子,然后在PGSQL的基础上增加了图形化管理(参考:人大金仓Kingbase V8安装教程);
因此开发适配的时候,有些找不到资料的语法可以参考PostgrelSQL;
一、适配准备工作,准备人大金仓的jdbc驱动以及hibernate方言包
问题说明:人大金仓有不同jdk版本的驱动包,以及各个hibernate版本的适配方言,在安装目录的里面的jdbc文件里面;
解决步骤:根据自己的环境找到对应的驱动文件,以及方言包即可(因为使用maven管理依赖,所以直接把jar安装在本地仓库就可以了);(使用的是jdk8的驱动文件,以及hibernate4.3.11版本对应的方言)
然后准备hibernate数据源的配置文件
#kingbase8hibernate.dialect=org.hibernate.dialect.Kingbase8Dialecthibernate.validationQuery=SELECT 1hibernate.database.name=TESTDBhibernate.url=jdbc:kingbase8://192.167.11.11:54321/${jdbc.database.name}hibernate.username=TEST001hibernate.password=123456hibernate.driver=com.kingbase8.Driver
二、insert数据时,报错:Start position [1] cannot exceed overall CLOB length [0]
问题说明:如果成员属性的类型是Clob,然后列值设置的是null或者""(空字符串),就会有这个异常产生;
解决步骤:根据报错位置,找到该类型是Hibernate核心包里面的org.hibernate.engine.jdbc.ClobProxy ,找到这个报错的位置,通过断点查看到,由于传入的时候start 默认是1,然后实际上长度 getLength() 是0,所以导致抛出了这个异常,然后实际使用的时候写的是 start - 1,所以按理说这个判断可以直接改成 start - 1 > getLength() ;
三、项目activiti框架初始化报错,报错:ActivitiException: couldn't deduct database type from database product name 'KingbaseES'
问题说明:activiti框架默认肯定是不支持人大金仓数据库的,所以这个需要修改activiti的源代码增加人大金仓的数据库支持;(目前版本是5.20版本,版本比较旧了,但是按理说新版本应该也是这么适配的)
解决步骤:通过依赖库找到activiti-engine-xxx-source.jar ,从这个jar里面获取核心配置类org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl 的源代码,放到项目的主启动模块(当然也可以重新打包成jar),然后找到"PostgreSQL",添加如下图所示的适配代码,注意:这个意思就是人大金仓的数据库初始化、数据查询等语句都是用 PostgreSQL的,目前看下来基本上都是可以适配的,但是需要注意: 人大金仓数据库安装时要设置为大小写不敏感;