Hibernate操作延迟加载的关联

开发 后端
Hibernate 3对集合使用Hibernate延迟select抓取,对返回单值的关联使用延迟代理抓取。对几乎是所有的应用而言,其绝大多数的关联,这种策略都是有效的。

Hibernate操作延迟加载的关联有很多值得学习的地方,这里我们主要介绍Hibernate延迟,包括介绍Hibernate延迟使用等方面。

默认情况下,Hibernate 3对集合使用延迟select抓取,对返回单值的关联使用延迟代理抓取。对几乎是所有的应用而言,其绝大多数的关联,这种策略都是有效的。

注意:假若你设置了hibernate.default_batch_fetch_size,Hibernate会对延迟加载采取批量抓取优化措施(这种优化也可能会在更细化的级别打开)。

然而,你必须了解延迟抓取带来的一个问题。在一个打开的Hibernate session上下文之外调用延迟集合会导致一次意外。比如:

  1. s = sessions.openSession();  
  2. Transaction tx = s.beginTransaction();  
  3.               
  4. User u = (User) s.createQuery("from User u where u.name=:userName")  
  5.     .setString("userName", userName).uniqueResult();  
  6. Map permissions = u.getPermissions();  
  7.  
  8. tx.commit();  
  9. s.close();  
  10.  
  11. Integer accessLevel = (Integer) permissions.get("accounts");  // Error! 

在Session关闭后,permessions集合将是未实例化的、不再可用,因此无法正常载入其状态。 Hibernate对脱管对象不支持延迟实例化. 这里的修改方法是:将permissions读取数据的代码 移到tx.commit()之前。

除此之外,通过对关联映射指定lazy="false",我们也可以使用非延迟的集合或关联。

但是, 对绝大部分集合来说,更推荐使用延迟方式抓取数据。如果在你的对象模型中定义了太多的非延迟关联,Hibernate最终几乎需要在每个事务中载入整个数据库到内存中!

但是,另一方面,在一些特殊的事务中,我们也经常需要使用到连接抓取(它本身上就是非延迟的),以代替查询抓取。

这里我们就不再说明如何具体的定制Hibernate中的抓取策略。在Hibernate3中,具体选择哪种抓取策略的机制是和选择单值关联或集合关联相一致的。

【编辑推荐】

  1. 简述Hibernate中加载并存储对象
  2. Hibernate传播性持久化攻略
  3. 深入了解Hibernate自动状态检测
  4. 简单学会Hibernate对象持久化
  5. 分析Hibernate自增主键
责任编辑:仲衡 来源: javanb
相关推荐

2009-09-24 11:41:46

Hibernate延迟

2009-06-17 11:18:02

Hibernate延迟

2009-09-28 09:56:53

Hibernate属性

2009-09-28 09:40:28

Hibernate集合延迟加载

2009-09-25 10:17:21

Hibernate延迟

2009-07-02 09:39:37

Hibernate延迟

2011-11-24 21:03:10

ibmdw

2009-09-28 09:35:10

Hibernate实现实体对象延迟加载

2012-02-03 10:54:50

HibernateJava

2012-08-15 11:36:13

Hibernate

2009-09-25 15:34:42

Hibernate关联

2011-06-08 14:22:51

延迟加载

2009-09-25 12:59:52

Hibernate映射

2023-06-29 07:48:35

异步加载JavaScript

2012-06-05 10:22:45

jQuery

2022-12-02 08:00:00

JavaScriptAstro前端

2009-09-25 10:22:35

Hibernate多表

2021-05-08 09:49:07

JavaScript延迟加载

2009-06-17 14:55:26

Hibernate数据

2015-08-25 10:28:38

前端图片延迟加载
点赞
收藏

51CTO技术栈公众号