解决方案 »

  1.   

    延迟加载(Lazy  )主要是hibernate对sql语句的自动生成sql 如果把Lazy设为false就是即时加载就会直接执行把它关联的表也查出来执行这个的时候执行多条sql把数据全部查出来,缺点浪费内存。Lazy=“true” 即为延迟加载,当需要它的关联表的数据时再执行关联表的sql  
      

  2.   

    我是想知道hibernate的实现原理 我明明调用的是getTeam()方法 为什么返回的是 一个代理类  
      

  3.   

    这个我知道 ,我就是不知道hibernate这么实现的 比如我明明要的是一个苹果 但hibernate 给我一个梨 为什么呢 hibernate在哪里做了什么处理呢
      

  4.   

    不是返回代理类的问题,因为hibernate在多对一的情况下,查询从属对象默认就是懒加载,不光是many-to-one,one-to-one和one-to-many也是如此。
      

  5.   

    这个我知道 ,我就是不知道hibernate这么实现的 比如我明明要的是一个苹果 但hibernate 给我一个梨 为什么呢 hibernate在哪里做了什么处理呢这个我知道 我就想知道
    hibernatet怎么做到的   
      

  6.   

    大致是这样的,hibernate自动创建了一个那个对象的子类作为代理对象,只存放了一个Id,有兴趣你去看下源码。
      

  7.   

    再说了,你说你要苹果,只是你以为你能得到苹果。人家hibernate可没答应给你苹果。如果不懒加载,你可以得到苹果,可人家hibernate就规定了这种情况默认是懒加载。明白了吗?
      

  8.   

    不是返回代理类的问题,因为hibernate在多对一的情况下,查询从属对象默认就是懒加载,不光是many-to-one,one-to-one和one-to-many也是如此。我明明调用的是getTeam()方法 hibernate怎么给我生成一个代理类了 hibernate 是怎么去拦截getTeam()方法 并且用cglib 生成一个动态代理类的
      

  9.   

    SQL语句很明显了吧,你取User对象的时候压根就没有去查询Team对象,你的Team对象本身就是空的。你想通过getTeam()让hibernate再自动给你发一条关联查询的SQL去查询Team对象的话,就去掉懒加载。如果你想问为什么默认就是懒加载,这个人家框架就是这样规定的,你看源码也是这样。