做一个考勤系统,统计员工在每个项目上的考勤信息,在编辑的时候更改员工所在项目时报错identifier of an instance of com.viva.quantum.model.biz.Project was altered from 26 to 22; nested exception is org.hibernate.HibernateException: identifier of an instance of com.viva.quantum.model.biz.Project was altered from 26 to 22,搜了一下说通过查询得到的结果不能修改主键或者外键什么的,但不知道该怎么修改,请各位大神指教一下
16条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
针对您所描述的问题,即在编辑员工考勤信息时,当更改员工所在项目时出现“identifier of an instance of com.viva.quantum.model.biz.Project was altered from 26 to 22”错误,这通常表示您试图修改一个实体(这里是
Project
类的实例)的主键(ID)。在关系型数据库及Hibernate ORM框架中,主键是用于唯一标识一条记录的关键字段,一般不允许被修改。根据您提供的代码片段,错误可能出现在以下几行:
Project oldProject = obj.getProject(); // ... Project p = obj.getProject();
您尝试更新
obj
(DutyDt
对象)中的Project
关联,并在后续代码中对Project
及其相关数据进行调整。为解决此问题,您可以遵循以下步骤进行代码调整:-
分离项目变更逻辑:将项目变更操作与员工考勤信息更新分开处理。先处理项目变更,然后再更新员工考勤信息。这样可以避免在保存考勤信息时直接修改
Project
实体的主键。 -
使用项目ID进行关联:在更新员工考勤信息时,仅更改与项目关联的ID,而非整个
Project
实体。这样,Hibernate就不会尝试修改Project
实体的主键。
以下是修改后的示例代码:
@RequestMapping(value = @v"Lid)/edit", method = RequestMethod.POST) public java.lang.String processUpdateOwnerForm(@Valid DutyDt obj, BindingResult result, Map<java.lang.String, Object> model, @PathVariable("id") int id) { if (result.hasErrors()) { return getJspPath() + "/createOrUpdate"; } else { obj.setId(id); // 获取当前项目ID和新选择的项目ID int oldProjectId = obj.getProject().getId(); int newProjectId = // ... 从请求参数或表单中获取新的项目ID // 更新员工考勤信息中的项目关联 obj.setProjectId(newProjectId); this.getRepository().saveAndFlush(obj); // 处理项目工作日统计变更 ProjectPlan oldPlan = projectPlanReposity.findByDeletedAndProject_Id(b: false, oldProjectId); ProjectPlan newPlan = projectPlanReposity.findByDeletedAndProject_Id(b: false, newProjectId); // 根据obj.getStat()计算工作日增减并更新相应ProjectPlan // ...(此处省略原有逻辑) projectPlanReposity.saveAndFlush(oldPlan); projectPlanReposity.saveAndFlush(newPlan); model.put("id", id); model.put("obj", obj); return "redirect:" + getNameSpace() + "/" + obj.getId(); } }
请注意,上述代码示例假设您有一个
setProjectId(int projectId)
方法用于设置DutyDt
对象中与项目关联的ID。同时,您需要从请求参数或表单中获取用户选择的新项目ID(newProjectId
),并将其用于更新obj
。通过以上修改,您应该能避免直接修改
Project
实体的主键,从而解决报错问题。如果您还有其他疑问或需要进一步的帮助,请随时告诉我。解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题