在删除一个流程定义的时候出现以下问题,不知道是什么原因。
org.hibernate.exception.SQLGrammarException: could not execute query
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
org.hibernate.loader.Loader.doList(Loader.java:2231)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
org.hibernate.loader.Loader.list(Loader.java:2120)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
org.jbpm.pvm.internal.query.AbstractQuery.execute(AbstractQuery.java:96)
org.jbpm.pvm.internal.query.ProcessDefinitionQueryImpl.execute(ProcessDefinitionQueryImpl.java:65)
org.jbpm.pvm.internal.query.AbstractQuery.untypedList(AbstractQuery.java:71)
org.jbpm.pvm.internal.query.ProcessDefinitionQueryImpl.list(ProcessDefinitionQueryImpl.java:141)
org.jbpm.pvm.internal.cmd.DeleteDeploymentCmd.execute(DeleteDeploymentCmd.java:63)
org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:54)
org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
org.jbpm.pvm.internal.repository.RepositoryServiceImpl.deleteDeploymentCascade(RepositoryServiceImpl.java:73)
com.smartdot.leave.action.DeleteProcessDefinition.doPost(DeleteProcessDefinition.java:30)
com.smartdot.leave.action.DeleteProcessDefinition.doGet(DeleteProcessDefinition.java:19)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

解决方案 »

  1.   

    数据库使用的是MySQL吧,如果是将hibernate的方言设置成:org.hibernate.dialect.MySQLInnoDBDialect问题就会解决。
      

  2.   

    我的数据库是Oracle10g,方言设置是oracle的方言:<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>这个应该没有问题。
      

  3.   

    删除流程定义代码:
    String processDefinitionId = request.getParameter("processDefinitionId");
    ProcessEngine processEngine = Configuration.getProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    repositoryService.deleteDeploymentCascade(processDefinitionId);
    request.getRequestDispatcher("index.jsp").forward(request, response);
    其中,"processDefinitionId"是从jsp传来的流程定义id,这个id存在无误。
    我使用的是jbpm4.3,tomcat5.5。这应该和tomcat版本无关吧。
      

  4.   

    吼吼,终于逮到问题啦。
    请大家注意,方法名是删除deployment,因此我们必须传递一个deploymentId才行,这个deploymentId是个string,但是实际使用时,会转换成long型。
    repositoryService.deleteDeploymentCascade(processDefinitionId);再看看我们这位仁兄,妄图使用processdefinitionid冒名顶替。这个processDefinitionid是一个string,而且是不能转换成long型的字符串。
    String processDefinitionId = request.getParameter("processDefinitionId");因此,出问题很正常,但是比较让人疑惑的是,应该报错NumberFormatException才对,却不知道为何变成了BadSQLGammerException了。
      

  5.   

    解决方案,传递deploymentId,删除整个部署包。通过processDefinition.getDeploymentId()获得该值。
      

  6.   

    对jBPM4有兴趣,但是还没入门的同志请注意。请先看我们提供的jBPM4入门视频。
    http://www.family168.com/jbpm4/video.html然后再看一下常见问题列表faq
    http://www.family168.com/jbpm4/faq.html然后就可以看翻译好的官方用户手册和开发文档了。
    用户手册
    http://www.family168.com/tutorial/jbpm4.0/html/index.html
    开发文档
    http://www.family168.com/tutorial/jbpm4devguide/html/index.html 
      

  7.   

    #8楼,是你发现的问题。
    我用processDefinition.getId()的值赋给了deleteDeploymentCascade(processDefinitionId)中,
    算是学会了一点。
    在ProcessDefinition中,有两个id,一个是DbId是long类型的Id,这个是用processDefinition.getDeploymentId()获得;还有一个是id类型是String,一般是“流程名-版本号”的形式。
    DbId好像是流程定义的全局唯一Id,id是同一类流程定义的唯一Id。
    谢谢了,8楼。
      

  8.   

    jbpm4是这样的。deployment入库,processDefinition不入库,需要把deployment里包含的xml解析以后才会在内存中构建对应的processdefinition,所以要在数据库中删除记录,就要用deploymentid,算是你说的dbid。
      

  9.   

    我在执行流程的最后一个任务的时候执行到taskService.completeTask(taskId);就会抛出这个异常,我不知道是怎么回事,同样请大家帮忙解决下。谢谢。。很急。。