Struts Problem Report
Struts has detected an unhandled exception:
Messages:
-
- identifier of an instance of cn.itcast.elec.domain.ElecApplication was altered from 1 to null
File:
org/hibernate/event/def/DefaultFlushEntityEventListener.java
Line number:
85
Stacktraces
org.hibernate.HibernateException: identifier of an instance of cn.itcast.elec.domain.ElecApplication was altered from 1 to null
错误信息: 某个对象的主键被置空!
总结:由于使用BeanUtils.copyProperties()方法copy两个对象;错误发现了:
我到错了包,正确的 import com.sun.org.apache.commons.beanutils.BeanUtils;
第一参数是: 需要复制的对象
第二参数哦:是被复制的对象
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, readOnly = false)
public void saveApplication(ElecApplication elecApplication) {
Integer applicationIds = elecApplication.getApplicationTemplateID();
/* 获取模板对象* */
ElecApplicationTemplate elecApplicationTemplate = elecApplicationTemplateDao
.findObjectByID(applicationIds);
/** 保存申请信息 */
this.saveElecApplication(elecApplication,elecApplicationTemplate);
// 从模板中得到key
String key = elecApplicationTemplate.getProcessDefinitionKey();
/** 启动线程定义 */
Map<String, Object> variables = new HashMap<String, Object>();
ProcessVariables processVariables = this.applicationToProcessVariables(elecApplication);
// javaBean复制
variables.put("application", processVariables);
ProcessInstance pi = processEngine.getExecutionService()
.startProcessInstanceByKey(key, variables);
// 获取任务id
Task task = processEngine.getTaskService()//
.createTaskQuery()//
.processInstanceId(pi.getId())// 使用流程实例的ID进行查询
.uniqueResult();
/** 完成任务 */
processEngine.getTaskService().completeTask(task.getId());
}
/* javaBean的复制* */
private ProcessVariables applicationToProcessVariables(
ElecApplication elecApplication) {
//如果2个对象中的属性相同,类型相同,可以完成值的复制
ProcessVariables processVariables = new ProcessVariables();
try {
BeanUtils.copyProperties(processVariables, elecApplication);
} catch (Exception e) {
throw new RuntimeException();
}
return processVariables;
}
// 保存申请信息;
private void saveElecApplication(ElecApplication elecApplication,
ElecApplicationTemplate elecApplicationTemplate) {
/* 获取模板名称* */
String templateName = elecApplicationTemplate.getName();
/* 从session中获得申请人的名称* */
ElecUser elecUser = (ElecUser) ServletActionContext.getRequest()
.getSession().getAttribute("globle_user");
String applicationName = elecUser.getUserName();
/* 获取当前时间转化为String* */
Date date = new Date();
String dateTimeString = DateToStringUtils.currentDateToString(date);
/* 创建申请信息对象* */
elecApplication.setTitle(templateName + applicationName + dateTimeString);
elecApplication.setApplyTime(new Date());
elecApplication.setStatus(ElecApplication.APPLICATION_RUNNING);
elecApplication.setElecApplicationTemplate(elecApplicationTemplate);
elecApplication.setElecUser(elecUser);
/* 获取文件上传路径* */
File upload = elecApplication.getUpload();
String path = FileUploadUtils.fileReturnPath(upload);
elecApplication.setPath(path);
/** 保存当前信息 */
elecApplicationDao.save(elecApplication);
}