Hibernate.initialize(Obj)用法

本文介绍Hibernate框架中懒加载(lazy loading)的实现机制及其应用场景。通过讲解如何利用Hibernate.initialize()方法来动态改变对象加载方式,使得开发人员能够在需要时灵活控制对象的加载,避免不必要的数据库查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate.initialize(Obj)用法

原创  2007年12月10日 23:07:00
导读: 
  在使用hibernate进行持久化时,有时需要动态的改变对象的加载,比如在编辑页面里面lazy=true,而在浏览页面lazy=false,这样可以在需要lazy的地方才进行控制。而配置文件中Lazy属性是全局控制的,如何处理呢? 
  当元素或者元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。 
  在配置文件里面可以用lazy=true,在程序里面可以用强制加载的方法Hibernate.initialize(Object proxy) 方法强制加载这样就相当于动态改变为lazy=false。 
  但在使用时需要注意的一点是:其中的proxy是持久对象的关联对象属性,比如A实体,你要把A的关联实体B也检出,则要写Hibernate.initialize(a.b)。 

本文转自 
http://hi.baidu.com/beforedead/blog/item/c626b60fbbffa5efab6457f4.html
 
a363722188
  • a363722188
    2014-02-21 14:463楼
  • Hibernate的get()方法是会马上发送一条sql语句的吧? load()方法才是返回一个实体代理 能不能取出一个实体关联的另一个实体主要是依靠fetch属性的值和默认的值决定的吧? 而是否级联操作是依靠cascade属性的值决定的吧?
gyftdr127
lsj19830812
  • lsj19830812
    2008-01-16 17:411楼
  • get() ---Hibernate不会马上产生任何select语句 ?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值