写jbpm4.4执行完成最后一个任务遇到如下问题。

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`JBPM4_EXECUTION`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `JBPM4_EXECUTION` (`DBID_`))
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2551)
    ... 34 more
### EXCEPTION ###########################################
10:25:04,540 FIN | [HibernateSessionResource] ----- rolling back hibernate tx 1940445711 -----------------------------------------------------

测试流程如图:
这里写图片描述
我测试代码是:completeTask

package com.tgb.video;

import java.util.List;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;

import junit.framework.TestCase;

public class testJbpm extends TestCase{
    /**
     * 第1步:部署流程;
     */
    public void deploy(){
        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine,
        RepositoryService repositoryService=processEngine.getRepositoryService();//通过流程引擎得到服务
        repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();        
    }
    /**
     * 第2步:创建流程实例;
     */
    public void createInstance(){
        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine;
        ExecutionService executionService=processEngine.getExecutionService();//通过流程引擎得到流程执行服务;
        ProcessInstance processInstance=executionService.startProcessInstanceByKey("test");
        System.out.println("流程实例ID==="+processInstance.getId());
    }
    /**
     * 获取对应人员的任务
     */
    public void getTask(){
        ProcessEngine processEngine=Configuration.getProcessEngine();//得到流程引擎processEngine;
        TaskService taskService=processEngine.getTaskService();//通过流程引擎得到任务服务接口
//      List<Task> tasks=taskService.findPersonalTasks("张三");//得到张三用户拥有的任务
        List<Task> tasks=taskService.findPersonalTasks("李四");//得到李四用户拥有的任务
        System.out.println("任务数量=="+tasks.size());
        System.out.println("任务名称=="+tasks.get(0).getActivityName());
        System.out.println("任务人员=="+tasks.get(0).getAssignee()+";任务ID=="+tasks.get(0).getId());


    }
    /**
     * 查看流程实例当前所在节点。如查看请假流程到哪一步了。
     */
    public void getCurrectActivity(){
        ProcessEngine processEngine=Configuration.getProcessEngine();
        ExecutionService executionService=processEngine.getExecutionService();
        String activityName=executionService.createProcessInstanceQuery().processInstanceId("test.10001").uniqueResult().findActiveActivityNames().toString();
        System.out.println("当前任务所在节点==="+activityName);
    }
    /**
     * 完成任务:这一任务完成后,进入到下一任务。如果下一任务为end节点。那么这个流程实例就结束了。
     */
    public void completeTask(){
        ProcessEngine processEngine=Configuration.getProcessEngine();
        TaskService taskService=processEngine.getTaskService();
//      taskService.completeTask("10002");//完成任务id 10002,在JBPM4_TASK表的DBID字段;这个任务完成后执行到下一个任务节点
        taskService.completeTask("20001");//完成任务id 20001,在JBPM4_TASK表的DBID字段;
    }

}
解决:hibernate方言有问题

org.hibernate.dialect.MySQLDialect

把hibernate方言 的配置改成以下

org.hibernate.dialect.MySQLInnoDBDialect

解释:

1,mysql默认存储引擎为InnoDB,需创建新表(表名不存在),数据库方言只能选择MySQLDialect;
2,mysql默认存储引擎为InnoDB,需更改表结构(表名存在),数据库方言三者皆可选(建议选择MySQLInnoDBDialect);












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值