hibernate.ObjectNotFoundException异常原因解决

hibernate.ObjectNotFoundException异常原因解决

直接上报出的异常:

// An highlighted block
org.hibernate.ObjectNotFoundException: No row with the given identifier exists[*.*.*]
java.io.IOException: Stream closed
	org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:210)
	org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
	org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:177)
	org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:942)
	org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:652)
	org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:123)
	org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
	com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
	com.hq.basic.iterceptor.SessionIterceptor.intercept(SessionIterceptor.java:28)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
	org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
	org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
	org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:230)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

异常原因

这里核心的异常就是hibernateNotObjectFound这个异常,大家都知道hibernate表关联引用有one-to-many/many-to-one等关联关系,这个异常解释为,多方对象中没有找到一方的关联引用,导致NotFoundObject异常

异常出现场景

大多数出现的场景是因为删除了一方的对象,而多方中的关联外键并没有清空导致的

解决办法

1.如果是配置文件:
在hibernate多方配置文件中,找到具体的外键引用对象 many-to-one 标签中加入: not-found=“ignore” 代码即可解决。

2.如果是注解:
在关联对象上添加注解:@NotFound(action=NotFoundAction.IGNORE) 即可。

2025-08-14 09:55:57.343 -ERROR 17 --- [nio-9130-exec-4] c.c.t.i.c.AbstractCustomExceptionHandler@printExceptionStack: [[L4Fg]] [http-nio-9130-exec-4] cn.com.truthvision.iacp.pojo.exception.ObjectNotFoundException: county[110105] not found [L4Fg] cn.com.truthvision.iacp.pojo.exception.ObjectNotFoundException: county[110105] not found [L4Fg] at cn.com.truthvision.iacp.biz.smartpark.service.service.AdministrativeDivisionService.lambda$queryCounty$16(AdministrativeDivisionService.java:226) [L4Fg] at java.base/java.util.Optional.orElseThrow(Optional.java:403) [L4Fg] at cn.com.truthvision.iacp.biz.smartpark.service.service.AdministrativeDivisionService.queryCounty(AdministrativeDivisionService.java:225) [L4Fg] at cn.com.truthvision.iacp.biz.smartpark.service.controller.AdministrativeDivisionController.lambda$queryCounty$3(AdministrativeDivisionController.java:91) [L4Fg] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) [L4Fg] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) [L4Fg] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) [L4Fg] at java.base/java.lang.Thread.run(Thread.java:1583) 2025-08-14 09:55:57.344 - INFO 17 --- [nio-9130-exec-4] c.c.t.i.b.s.s.c.ResponseBodyPrinter @beforeBodyWrite: request method[GET] uri[http://100.67.190.21:9130/smart-park-service/administrative-division/country?callerUid=60271788-0021-0000-0000-000000000000&countyCode=110105] body[] response body[{"code":404000004,"message":"county[110105] not found"}] 2025-08-14 09:56:03.606 -DEBUG 17 --- [ scheduling-1] c.c.t.i.b.s.service.service.TaskService @scheduleTask: scheduleTask: runningTask(0) 2025-08-14 09:56:03.609 - INFO 17 --- [ scheduling-1] p6spy @logSQL: time: 0 ms | statement-0 | sql: SELECT 1 2025-08-14 09:56:03.612 - INFO 17 --- [ scheduling-1] p6spy @logSQL: time: 0 ms | statement-0 | sql: /* select generatedAlias0 from TaskProgressPO as generatedAlias0 where ( generatedAlias0.status in (:param0) ) and ( generatedAlias0.lastUpdate<:param1 ) */ select taskprogre0_."task_id" as task_id1_29_, taskprogre0_."code" as code2_29_, taskprogre0_."complete_time" as complete3_29_, taskprogre0_."ex_msg" as ex_msg4_29_, taskprogre0_."last_update" as last_upd5_29_, taskprogre0_."progress" as progress6_29_, taskprogre0_."result" as result7_29_, taskprogre0_."start_time" as start_ti8_29_, taskprogre0_."status" as status9_29_ from t_task_progress taskprogre0_ where (taskprogre0_."status" in ('created' , 'running')) and taskprogre0_."last_update"<'2025-08-14T09:55:33.606+0800' limit 1 2025-08-14 09:56:03.612 -DEBUG 17 --- [ scheduling-1] c.c.t.i.b.s.service.service.TaskService @scheduleTask: scheduleTask: found task(0) 2025-08-14 09:56:03.639 -DEBUG 17 --- [ scheduling-1] c.c.t.i.b.s.s.service.ImportTaskService @scheduleTask: scheduleTask: runningTask(0) 2025-08-14 09:56:03.643 -DEBUG 17 --- [ scheduling-1] .t.i.b.s.s.s.ImportProprietorTaskService@scheduleTask: scheduleTask: runningTask(0) 详细解释日志,并分析问题原因
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值