hibernate + DB2 数据源配置及对象映射配置

来源:互联网 发布:河北11选5遗漏数据 编辑:程序博客网 时间:2024/05/13 17:57

这篇文章就是想简单分享对于hibernate3+db2项目的一些配置信息,包括两个东西 实体类的ID生成策略配置,和数据源连接配置以及必备的jar文件

 

 

最近独立做了一个会议室管理系统,项目的技术架构 struts2 +hibernate3.2 +spring2.5 ,客户的生成环境上的数据库是DB2的,

但一个月前开发的时候本机已经装好了oracle数据库,就没有再去装DB2的库然后做开发,因为我觉得既然用了hibernate的话

到时候也就是改个配置的问题。

 

其实换数据库平台的时候也确实就是换个hibernate配置的问题,但是问题却没有那么简单,DB2这东西不太好玩,总是个种问题

 

1、首先是数据库连接配置的,我采用的是type4,数据库版本是DB v9.5,配置信息为

Driver Name:com.ibm.db2.jcc.DB2Driver
    URL: jdbc:db2://ServerIP:50000/databasename,但是项目一启动就报错了,说是JDK版本不支持的问题,

网上有篇文掌介绍说是你得把服务器的JDK版本换成IBM的JDK,最后我把TOMCAT的JDK也换成了IBM JDK

最后倒腾了一天,还是报错,心灰意冷,不想搞了 。因为那一天是上周五了,放假休息忘记这特烦人的茬吧

况且做项目的过程中

今天上班还得接着做这事儿,我把V9.5的库给卸载了,然后装上了V9.7的,然后配置还是和上面一样,

然后数据库连接的JAR包拷贝了db2java.zip、db2jcc_license_cu.jar、db2jcc.jar这三个jar包到lib目录下,然后启动项目

所幸的是这次启动没报错,而且表也给我自动生成了(因为我配置了<prop key="hibernate.hbm2ddl.auto">update</prop>)这个属性

到这里没报错我也不想在去纠结原因了。

 

2、但是问题又来了,项目运行起来后,前台页面点击添加操作无法往数据库连接数据,然后后台报错:hibernate无法从数据库获取一个ID值

我一看我的实体ID的生成策略为

@Id
@GeneratedValue

网上的解决办法是把ID的字段设置成自增长就可以了,反正貌似DB2上不行,ID自增长的是应该是Mysql数据库,

 

 

然后我就去搜索了hibernate的id其他生成策略,看完之后,许多作者都推荐uuid的生成方式。对DB2也支持

于是我又把id的生成方式改成了

 @Id
 @GenericGenerator(name="idGenerator", strategy="uuid") //这个是hibernate的注解
 @GeneratedValue(generator="idGenerator") //使用uuid的生成策略

项目启动,表确实能生成生成出来了,但是错误还是同上面一样,hibernate无法往id字段里面set一个值,然后保存到库里,

 

NND的真是烦死人,IBM的东西觉得让人蹩脚,然人来火,

 

没办法啊,客户生产环境就是DB2,而且自己的项目也开发完成了,反正这配置怎么着都必须给弄成功出来,

然后我又看到序列的生成方式,因为序列DB2和oracle都能支持,于是就果断选择了这种方式

然后配置信息改成了

 @Id
 @SequenceGenerator(name="sequenceGenerator",sequenceName="ACTIVITIESSCOPE_SEQ")
 @GeneratedValue(generator="sequenceGenerator",strategy=GenerationType.SEQUENCE)
 @Column(name = "ID", unique = true, nullable = false, precision = 10, scale = 0)

 

所幸的是这次启动后,就能正常往数据库添加数据了,oh god,算是一个小小的成功吧,接着测功能,

看其他SQL语句有没有不支持的地方,然后继续写文章发感想。

 

 

原创粉丝点击