hibernate 中的 lazy="proxy" 和 lazy="no-proxy" 的区别

本文探讨了在多对一关联中使用不同懒加载策略的影响。当设置为代理(proxy)时,只要通过Child对象访问Parent的任何方法,即使这些方法不依赖实例变量,也会触发Parent对象的加载。若设置为非代理(no-proxy),仅在访问依赖实例变量的方法时才会加载Parent对象。

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

Child   <-   many-to-one   ->Parent  
   
  class   Child   {  
      private   Parent   parent;  
   
      public   Parent   getParent   (){  
          return   this.parent;//访问了实例变量  
      }  
       
  }  
   
  class   Parent   {  
      private   String   name;  
   
      public   String   getName(){  
          return   this.name;//访问了实例变量  
      }  
   
      public   void   f(){  
          System.out.println("invokeing   f()");//没有访问实例变量  
      }  
  }  
   
  如果   many-to-one   的lazy设为proxy,当child.getParent().getName()或child.getParent().f()时,parent都会被抓取,若设为no-proxy,调用child.getParent().f()时,parent是不会被抓取的,同时这种方式需要编译时字节码增强,否则和proxy没区别。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值