`
Kevin12
  • 浏览: 236163 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Dialect does not support identity key generation

阅读更多
链接网址:http://kevin12.iteye.com/blog/1954203
最近做流程项目将原来流程项目的数据库由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中搜索一下,看看有没有类似的问题,如果有看看有没有解决方法,别人给的解决方法不一定适合你的问题,但是它能给你解决思路,再加上自己的思考,问题很容易解决。。。如果你下次遇到问题不妨用用此方法,这样能提高你的分析问题解决问题的能力。。。
技术是学不完的,问题也是各种各样,只有提高解决问题的能力,才能所向披靡,加油加油!!!

链接网址:http://kevin12.iteye.com/blog/1954203
hibernate主键生成机制:http://kevin12.iteye.com/blog/1954205
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics