关于javaidentifier of an instance of

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);
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值