千家信息网

怎么在Hibernate中实例化集合和代理

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"怎么在Hibernate中实例化集合和代理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么在Hibernate中实例化集合和代理"吧!
千家信息网最后更新 2026年11月01日怎么在Hibernate中实例化集合和代理

本篇内容主要讲解"怎么在Hibernate中实例化集合和代理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么在Hibernate中实例化集合和代理"吧!

Hibernate中实例化集合和代理在Session范围之外访问未初始化的集合或代理,Hibernate将会抛出LazyInitializationException异常。 也就是说,在分离状态下,访问一个实体所拥有的集合,或者访问其指向代理的属性时,会引发此异常。

有时候我们需要保证某个代理或者集合在Session关闭前就已经被初始化了。 当然,我们可以通过强行调用cat.getSex()或者cat.getKittens().size()之类的方法来确保这一点。 但是这样的程序会造成读者的疑惑,也不符合通常的代码规范。

静态方法Hibernate.initialized() 为你的应用程序提供了一个便捷的途径来延迟加载集合或代理。 只要它的Session处于open状态,Hibernate.initialize(cat) 将会为cat强制对代理实例化。 同样,Hibernate.initialize( cat.getKittens() ) 对kittens的集合具有同样的功能。

还有另外一种选择,就是保持Session一直处于open状态,直到所有需要的集合或代理都被载入。 在某些应用架构中,特别是对于那些使用Hibernate进行数据访问的代码,以及那些在不同应用层和不同物理进程中使用Hibernate的代码。 在集合实例化时,如何保证Session处于open状态经常会是一个问题。有两种方法可以解决此问题:

在一个基于Web的应用中,可以利用servlet过滤器(filter),在用户请求(request)结束、页面生成 结束时关闭Session(这里使用了在展示层保持打开Session模式(Open Session in View)), 当然,这将依赖于应用框架中异常需要被正确的处理。

在返回界面给用户之前,乃至在生成界面过程中发生异常的情况下, 正确关闭Session和结束事务将是非常重要的, 请参见Hibernate wiki上的"Open Session in View"模式,你可以找到示例。

在一个拥有单独业务层的应用中,业务层必须在返回之前,为web层"准备"好其所需的数据集合。这就意味着 业务层应该载入所有表现层/web层所需的数据,并将这些已实例化完毕的数据返回。

通常,应用程序应该 为web层所需的每个集合调用Hibernate.initialize()(这个调用必须发生咱session关闭之前); 或者使用带有FETCH从句,或FetchMode.JOIN的Hibernate查询, 事先取得所有的数据集合。

如果你在应用中使用了Command模式,代替Session Facade , 那么这项任务将会变得简单的多。

你也可以通过merge()或lock()方法,在访问未实例化的集合(或代理)之前, 为先前载入的对象绑定一个新的Session。

显然,Hibernate将不会,也不应该自动完成这些任务,因为这将引入一个特殊的事务语义。

有时候,你并不需要完全实例化整个大的集合,仅需要了解它的部分信息(例如其大小)、或者集合的部分内容。

你可以使用集合过滤器得到其集合的大小,而不必实例化整个集合:

( (Integer) s.createFilter( collection, "select count(*)" ).list().get(0) ).intValue()

这里的createFilter()方法也可以被用来有效的抓取集合的部分内容,而无需实例化整个集合:

s.createFilter( lazyCollection, "").setFirstResult(0).setMaxResults(10).list();

到此,相信大家对"怎么在Hibernate中实例化集合和代理"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

实例 代理 应用 方法 数据 内容 状态 业务 代码 模式 程序 部分 不同 事务 任务 可以通过 大小 应用程序 有时候 用户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网科技工作委员会毛军 重生之互联网科技帝国 华宇互联网科技 期待互联网科技 中国互联网科技发展 互联网金融科技平台 广州慧亚互联网科技怎么样 广州恒生互联网科技有限 武汉健翔互联网络科技有限公司 智腾互联网科技有限公司 互联网科技大赛获奖感言 上海京穆互联网科技有限公司 互联网公司高科技产品 深圳无忧互联网科技 互联网科技包装股份有限公司上市 全球科技与互联网公司市值变化 广州三三互联网科技有限公司 绵阳真晨互联网科技有限公司 互联网 科技节活动 微视频大赛 互联网高科技 互联网科技行业发展 互联网核心科技是什么 宁夏众和广鑫互联网科技有限公司 来此购互联网科技有限公司 成都铂石互联网科技做什么的 智腾互联网科技有限公司 科技类公司包括互联网吗 互联网科技快讯热点 互联网科技机房
0