今天在项目的开发中遇到了一个异常,如下:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists
在网上找了一下原因,主要原因是,一个表中存在数据,而他的关联表中却不存在数据。
产生此问题的原因抄录如下:
产生此问题的原因:
有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联table2.当hibernate查找的时候,table2里的数据没有与table1相匹配的,这样就会报No row with the given identifier exists这个错.(一句话,就是数据的问题!)
假如说,table1里有自身的主键id1,还有table2的主键id2,这两个字段.
如果hibenrate设置的单项关联,即使table1中的id2为null值,table2中id2中有值,查询都不会出错.但是如果table1中的id2字段有值,但是这个值在table2中主键值里并没有,就会报上面的错!
如果hibernate是双向关联,那么table1中的id2为null值,但是table2中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!
这就是报这个错的原因了,知道原因了就相应的改就行了.或许还有些人迷惑hibernate关联都配好了,怎么会出现这样的错?其实这是编程的时候出现的问题,假如说我在添加信息的时候,页面传过来的struts的formbean到dao方法中需要封装成hibernate的po(就是hibenrate的bean),要是一个个po.get(form.set())实在太麻烦了,这样一般都会写个专门的方法来封装,遇到po.get(form.set())这种情况直接把struts的formbean对象传到此方法中封装就行了,假如我有个字段是创建人id,那么这个字段是永远不会改的,我在添加的时候还调用这个方法,这个专门封装的方法是有一些判断的,假如说我判断一下,如果遇到创建人id传过来为空值,我判断如果是空值,我把创建人id设为0,但是用户表中userid是主键从1开始自增的,那么这样数据就对应不上了,一查就会出这个错了.这个错在开发刚开始的时候经常发生,因为每个人的模块都是由相应的人独立开发完成以后再整合在一起的,每个人写单独那一块的时候往往会忽略这些,所以整合的时候这些问题往往就都一下子全冒出来了....整合很辛苦
相关推荐
- 如果数据库中不存在,则抛出 `ObjectNotFoundException` 异常。 综上所述,Session 接口在 Hibernate 中扮演着至关重要的角色,通过它不仅实现了对象的持久化,还提供了高效的一级缓存管理机制。理解 Session 的...
3.hibernate的配置文件(hibernate.cfg.xml)得存在 4.POJO.hbm.xml文件存在 5.hibernate的jar包以及数据库的驱动包存在 Hibernate的编程: 1.构建Configuration对象读取配置文件 2.读取映射文件 3.构建SessionFactory...
在后续使用该对象的属性时,会抛出`org.hibernate.ObjectNotFoundException`异常。此外,`load()`支持懒加载,即只有在真正需要使用对象时才会触发数据库查询。 - **`get()`**:此方法也用于加载对象。但如果数据库...
11. 异常处理:熟悉Hibernate抛出的常见异常,如ConstraintViolationException、ObjectNotFoundException等,以及如何适当地捕获和处理它们。 12. 性能优化:探讨如何通过配置优化、缓存利用、批处理等策略提升...
javax.ejb.ObjectNotFoundException.class javax.ejb.RemoveException.class javax.ejb.SessionBean.class javax.ejb.SessionContext.class javax.ejb.SessionSynchronization.class javax.ejb.TimedObject.class ...
- 如果数据库中不存在该对象,则会抛出`org.hibernate.LazyInitializationException`或`org.hibernate.ObjectNotFoundException`异常。 - 使用`load()`可以提高性能,因为它减少了不必要的数据库访问。 2. **Get...
其区别在于,如果未能发现符合条件的记录,get 措施返回 null,而 load 措施会抛出一种 ObjectNotFoundException。 HQL 和 SQL 的区别 HQL 是面向对象查询的语言,而 SQL 是面向数据库表查询的语言。HQL 的 form ...
Hibernate抛出的异常通常继承自`HibernateException`,如`StaleObjectStateException`表示并发控制问题,`ObjectNotFoundException`表示对象未找到等。 ### 9. 结论 Hibernate通过对象关系映射简化了Java应用的...
【Hibernate和Mybatis】是两种常用的Java持久层框架,它们主要负责在业务逻辑层处理数据库的持久化操作,简化了开发者对数据库的访问和管理。 **Hibernate原理:** 1. Hibernate通过`Configuration().configure();`...
6. 异常处理:理解Hibernate特有的异常体系,如ConstraintViolationException和ObjectNotFoundException。 二、NHibernate:.NET平台的ORM利器 1. 概述:NHibernate是Hibernate在.NET平台上的移植版本,同样提供了...
如果找不到对应的记录,将会抛出 `org.hibernate.ObjectNotFoundException` 异常。 - `load(Class<T> theClass, Serializable id)`:根据类类型和主键加载对象。 - `load(Class<T> theClass, Serializable id, ...
- 与get类似,但在对象不存在时抛出`ObjectNotFoundException`异常。 - 支持延迟加载(Lazy Loading),即在真正需要时才加载数据。 #### Spring框架的IOC容器实现 Spring框架的核心是其IOC(Inversion of ...
了解Hibernate常见的异常,如`HibernateException`、`NonUniqueObjectException`、`ObjectNotFoundException`等,以便在编程时进行正确的错误处理。 ### 9. 事务管理 使用Transaction接口进行事务操作,如begin(),...
本文将深入探讨面试中涉及的几个关键点,包括JPBM接口、Hibernate的核心接口、缓存机制、Hibernate的get和load方法的区别、Session的概念以及Session与Cookie的区别。 首先,JPBM(Java Process and Business ...
Hibernate是一款流行的Java ORM(对象关系映射)框架,它允许开发者将数据库操作抽象化,以对象的方式进行处理,简化了数据库编程。以下是对`Hibernate配置[归类].pdf`文件中涉及的几个主要知识点的详细解释: ### ...
- `load`方法如果找不到对应的记录,会抛出`org.hibernate.ObjectNotFoundException`异常。这是因为`load`方法假设给定的ID肯定在数据库中存在,它采用延迟加载策略,先返回代理对象,当尝试访问对象属性时才会真正...
- Hibernate提供了丰富的异常体系,如ConstraintViolationException(约束违反)、ObjectNotFoundException(对象未找到)等,有助于调试和错误处理。 ### 8. 性能优化 - 使用批处理更新和查询,减少数据库交互...
【Hibernate 概述】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它为 Java 程序员提供了一种方便的方式来操作数据库,通过将 Java 类与数据库表进行映射,使得程序员可以用面向对象的方式来处理数据。ORM...