Hibernate异常之org.hibernate.ObjectNotFoundException: No row with the given identifier exists: .......

本文介绍了在使用Hibernate时遇到的ObjectNotFoundException异常,具体表现为尝试查询不存在的数据时报错。文章详细分析了一个示例,包括Clazz.hbm.xml配置、ClazzDao.java代码以及测试代码,指出问题在于测试用例中查询的班级ID不存在。作者提醒读者,当关闭了延迟加载并尝试加载不存在的对象时,会触发此异常。

1、异常描述

org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [cn.wang.entity.Clazz#1005]

备注:

      此处hibernate版本号3.6.10.Final

2、示例代码

2-1 Clazz.hbm.xml

注意:此处已经关闭了Clazz的延迟加载功能

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 用来映射实体类和表的对应关系
    	class="实体类的全路径"
    	table="实体类对应的表名"
     -->
    <class name="cn.wang.entity.Clazz" table="hibernate_class"  lazy="false">
        <!-- 映射主键列
             name="主键列对应的属性名"
             column="主键列名"
             type="属性的数据类型"
         -->
        <id name="id" column="id" type="java.lang.Integer">
           <generator class="assigned"/>      
        </id>
        <!-- 映射普通列  方式1:-->
        <property name="name" type="java.lang.String" column="name"/>
    </class>
   
    
</hibernate-mapping>

 

2-2 ClazzDao.java

       public Clazz findByIdLoad(int clazzId){
		// 1、创建session
		Session session = sessionFactory.getCurrentSession();
	    // 2、开启事务
		Transaction transaction = session.beginTransaction();
		// 3、单查
		// 参数1:要查询的类型的类对象   
		// 参数2:要查询的对象的id
		Clazz clazz = (Clazz)session.load(Clazz.class, clazzId);
		// 4、提交事务
		transaction.commit();
		return clazz;
	}

 

2-3 测试代码

       @Test // 测试单查    session.load()
	public void testFindByIdLoad(){
		Clazz clazz = clazzDao.findByIdLoad(18);
		System.out.println(clazz);
	}

分析原因:

测试代码中  clazzId = 18 的班级信息并不存在。对于不存在的信息,使用session.load()方法查询时就会报错

注意:此处已经关闭了Clazz的延迟加载功能

 

此文希望可以帮助到大家。如有错误,请指教。                                                           

如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。 

 

 

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、付费专栏及课程。

余额充值