千家信息网

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

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"怎么在Hibernate中实例化集合和代理",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么在Hibernate中实例化集合和代理"吧!
千家信息网最后更新 2025年02月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安全错误 数据库的锁怎样保障安全 数据库字段层深度计算 中国网络安全行业的成就和未来 软件开发技术参数 重仓互联网科技的基金有哪些 诊所医保网络安全管理制度 神牛软件开发公司 北京移动软件开发哪家好 外国服务器电影网站 测绘工程软件开发薪资待遇 太原人才网软件开发 每个浏览器都有自己的数据库吗 网络安全的第三方是指什么 服务器托管机房 中国电信 数据库的设计与实现全过程 科技进步的例子互联网 楚雄专业java软件开发 创建科技软件开发公司 网络安全循环管理机制 惠州金融软件开发热线 数据库字符串长度范围 无锡数字化智慧工地软件开发 珠海互联网科技有限公司 中小学校园网络安全检查表 阿里云里怎么看服务器地址 汽车网络技术的主要特点 软件行业软件开发成本核算 db2导出一条数据库 网络安全等级保护评分标准 应用开发和软件开发的区别 重庆合川蔬菜批发软件开发
0