Hibernate中lazy="proxy"和lazy="no-proxy"的區別

精妙的例子

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,只有調用 parent 類中牽涉到類變量的方法,纔會抓取 parent,否則,就像調用 f(), 不會抓取 parent,如調用child.getParent().f()時,parent是不會被抓取的,同時這種方式需要編譯時字節碼增
強,否則和proxy沒區別。

再看看lazy="true"和lazy="false"的用法

lazy代表延時加載,lazy=false,代表不延時,如果對象A中還有對象B的引用,會在A的xml映射文件中配置b的對象引用,多對一或一對多,不延時代表查詢出對象A的時候,會把B對象也查詢出來放到A對象的引用中,A對象中的B對象是有值的。如果lazy=true,代表延時,查詢A對象時,不會把B對象也查詢出來,只會在用到A對象中B對象時纔會去查詢,默認的是true,你可以看看後臺的sql語句的變化就明白了,一般需要優化效率的時候會用到。

lazy="proxy"和lazy="no-proxy"可以看做是一種lazy="false",即延遲加載可以,優化系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章