链接网址:http://kevin12.iteye.com/blog/1954203
最近做流程项目将原来流程项目的数据库由mysql改成oracle,今天保存绘制好的流程图时候,报错如下:
class="java" name="code">
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