Dialect does not support identity key generation

链接网址:[url]http://kevin12.iteye.com/blog/1954203[/url]
最近做流程项目将原来流程项目的数据库由mysql改成oracle,今天保存绘制好的流程图时候,报错如下:

org.springframework.orm.hibernate3.HibernateSystemException: Dialect does not support identity key generation; nested exception is org.hibernate.MappingException: Dialect does not support identity key generation
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:737)
at com.sense.workflow.dao.TbBWebWorkflOwNodeDAO.attachDirty(TbBWebWorkflOwNodeDAO.java:210)
at com.sense.workflow.service.impl.WebWorkflowMainServiceImpl.saveGraph(WebWorkflowMainServiceImpl.java:612)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

仔细查看错误,发现是hibernate配置文件的问题:原来的数据库是mysql的,hibernate对流程主表TbBWebWorkflOwMain.hbm.xml的主键配置的生成机制是identity:采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL;
配置代码如下:
        <id name="wwmWorkflowId" type="java.lang.Long">
<column name="WWM_WORKFLOW_ID" />
<generator class="identity" />
</id>

因为我将数据库改成oracle以后使用的主键自增是根据在数据库中创建的序列来实现的。所以上面的配置不不符合oracle数据库主键自增的要求,必须修改主键生成机制。
想上面的修改成sequence(采用数据库提供的sequence 机制生成主键。如Oralce 中的)即可解决问题,修改如下:
<id name="wwmWorkflowId" type="java.lang.Long">
<column name="WWM_WORKFLOW_ID" />
<generator class="sequence">
<param name="sequence">SENSEWF_SEQ</param>
</generator>
</id>

说明:class="sequence"是主键生成机制方式;<param></param>之间的SENSEWF_SEQ就是序列名称;创建的序列SENSEWF_SEQ如下:
   CREATE SEQUENCE  "SYSTEM"."SENSEWF_SEQ"  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 27 NOCACHE  NOORDER  NOCYCLE 


解决问题后的思考:发现问题后不能慌张,也不要问这个高人问那个前辈,或者在**群里发一大堆错误大喊大问,他们也不是万能的,关键还是靠自己,要先看出现了什么问题,是哪方面问题,实在是想不到时候就将问题在百度、google中搜索一下,看看有没有类似的问题,如果有看看有没有解决方法,别人给的解决方法不一定适合你的问题,但是它能给你解决思路,再加上自己的思考,问题很容易解决。。。如果你下次遇到问题不妨用用此方法,这样能提高你的分析问题解决问题的能力。。。
技术是学不完的,问题也是各种各样,只有提高解决问题的能力,才能所向披靡,加油加油!!!

链接网址:[url]http://kevin12.iteye.com/blog/1954203[/url]
hibernate主键生成机制:[url]http://kevin12.iteye.com/blog/1954205[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值