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的延迟加载功能
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。
Hibernate异常:No row with the given identifier exists 解析

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

被折叠的 条评论
为什么被折叠?



