`
xinklabi
  • 浏览: 1586512 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Hibernate如何避免抛出ObjectNotFoundException(某关联的对象被删除)

 
阅读更多

原文:http://blog.csdn.net/hardwin/article/details/4329652

 

下面这种情况在加载List的时候更容易出现问题。

 

我们项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到异常:org.hibernate.ObjectNotFoundException: No row with the given identifier exists

 

因为系统给用户使用过程中库表的数据会常发生变化,最常见的是人员变化,原先引用的User 在库表没了,hibernate 多对一关联,多的这端引用的一的那端,如此引用值在一的那端找不到数据,默认就会抛出异常;而后台判断控制不了此问题。解决办法就是在many-to-one的这端加上属性:not-found=ignore

 

hibernate many-to-one的属性not-found,用来指定引用的外键不存在时如何处理:

它有两个取值,exception(默认)抛出异常,ignore 忽略

分享到:
评论

相关推荐

    Hibernate的检索方式

    - **异常处理**:当对象不存在时,`get`方法抛出`NullPointerException`,而`load`方法则抛出`ObjectNotFoundException`。 **应用场景**: - 需要获取特定ID的对象时。 - 对性能有较高要求,希望减少不必要的查询...

    hibernate数据库访问接口设计

    Hibernate 抛出的异常通常继承自 `HibernateException`,如 `ConstraintViolationException`(违反约束)和 `ObjectNotFoundException`(对象未找到)。理解这些异常并适当地处理它们,对于编写健壮的代码至关重要。...

    常见hibernate面试题.doc

    在后续使用该对象的属性时,会抛出`org.hibernate.ObjectNotFoundException`异常。此外,`load()`支持懒加载,即只有在真正需要使用对象时才会触发数据库查询。 - **`get()`**:此方法也用于加载对象。但如果数据库...

    hibernate 延迟加载.docx

    然而,如果在`Session`关闭后尝试访问关联对象,会抛出`LazyInitializationException`异常,因为延迟加载策略只在`Session`打开的状态下有效。 **延迟加载的生效期** 延迟加载的生效时间与`Session`的生命周期相同...

    hibernate完全讲解实例演示

    如果数据库中没有匹配的数据,Load 方法会抛出 `ObjectNotFoundException` 异常。 - **Get 方法**:与 Load 相比,Get 方法会立即执行 SQL 查询来获取对象。如果数据库中没有找到匹配的记录,Get 方法会返回 `null`...

    java框架之hibernate

    - 如果数据库中不存在该对象,则会抛出`org.hibernate.LazyInitializationException`或`org.hibernate.ObjectNotFoundException`异常。 - 使用`load()`可以提高性能,因为它减少了不必要的数据库访问。 2. **Get...

    Hibernate常见面试题汇总

    - **Session.load()**:当找不到记录时抛出ObjectNotFoundException;可能会返回代理对象,并优先检查一级和二级缓存。 Hibernate的加载过程包括: - **一级缓存检查**:Session内部的缓存管理。 - **二级缓存...

    04_传智播客hibernate教程_Session接口及getloadpersist方法

    这是因为当调用load()时,它假设对象一定存在,如果实际上不存在,将会抛出ObjectNotFoundException异常。load()方法通常用于关联对象的懒加载,因为它的返回值可以直接用于关联查询,避免了多次数据库访问。 3. ...

    Hibernate延时加载与lazy机制.doc

    - 如果数据库中不存在对应ID的记录,延迟初始化时会抛出`ObjectNotFoundException`。 - 若Session关闭后访问延迟加载对象,会抛出`LazyInitializationException`。 **7. 影响行为** - 如果在Session生命周期内未...

    常见hibernate面试题

    - `load()`方法:返回的是对象的代理,即使数据库中不存在对应记录,也不会立即抛出异常,而是在尝试访问对象属性时抛出`ObjectNotFoundException`。支持延迟加载。 - `get()`方法:直接从数据库中查找,如果找不...

    Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别

    - `load`方法如果找不到对应的记录,会抛出`org.hibernate.ObjectNotFoundException`异常。这是因为`load`方法假设给定的ID肯定在数据库中存在,它采用延迟加载策略,先返回代理对象,当尝试访问对象属性时才会真正...

    hibernate面试题总会

    - `load()`:当数据库中不存在指定ID的对象时,返回一个代理对象,如果尝试访问其属性,会抛出`ObjectNotFoundException`异常。支持延迟加载,即只有在真正使用对象时才执行数据库查询。 - `get()`:如果在缓存中...

    hibernate get load区别

    如果通过代理对象尝试获取数据时发现数据不存在,则会抛出`org.hibernate.ObjectNotFoundException`异常。这种设计使得`load`方法更适合于那些确信数据存在的场景。 3. **支持懒加载**:由于`load`方法返回的是代理...

    使用Hibernate开发租房系统第12章课件包含代码

    11. 异常处理:熟悉Hibernate抛出的常见异常,如ConstraintViolationException、ObjectNotFoundException等,以及如何适当地捕获和处理它们。 12. 性能优化:探讨如何通过配置优化、缓存利用、批处理等策略提升...

    hibernate 三种 查询 方式 load与get的区别

    如果实体不存在,将会抛出`ObjectNotFoundException`。`load()`方法通常用于关联加载,因为它能确保延迟加载机制有效。 2. `get()`方法:直接从缓存或数据库中获取实体,如果实体不存在,返回`null`。这意味着如果...

    hibernate的核心接口--Session

    - 如果数据库中不存在,则抛出 `ObjectNotFoundException` 异常。 综上所述,Session 接口在 Hibernate 中扮演着至关重要的角色,通过它不仅实现了对象的持久化,还提供了高效的一级缓存管理机制。理解 Session 的...

Global site tag (gtag.js) - Google Analytics