Hibernate中的get与load有什么区别>?getHibernateTemplate().get(User.class,id);this.getHibernateTemplate().load(Organization.class, parentId));请问这两者间到底有什么区别,区别在哪里,请详细说清楚,谢谢大家.!
此题为我面试中所问到的题目!

解决方案 »

  1.   

    1、找不到符合条件的数据,get()方法将返回null。load()将会报出ObjectNotFoundEcception。2、get()方法直接返回实体类。load()方法可以返回实体的代理类实例。3、get()方法只在内部缓存中进行查找。load()方法可以利用二级缓存和内部缓存的现有数据。4、get方式马上发出sql。load在默认情况下支持延迟加载(lazy)。
      

  2.   

    get找不到返回null 至少不会报错而load找不到就会出现异常 还要抓异常
      

  3.   

    l:load方法(顾名思义,load的意思是‘加载’)它会搜索二级的缓存的,充分地利用二级缓存,绝对不会用sql去数据库查询,会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时,如果没有数据不存在,就会抛出个org.hibernate.ObjectNotFoundException异常 
    2:get方法(顾名思义,get的意思是‘获取’),它去会搜索session缓存,如果发现存在,即从缓存中取出,并加载到缓存中;否则用sql去数据库中查询,如果数据库中都没有查到,返回null,不会抛出任何异常。 
    综述:很明显方法的意义不同,使用该方法的动机是:在缓存中找不到数据时,你是否希望到数据库中查询。从这个动机来说,只要是考虑尽量减少对数据库不必要的查询 
      

  4.   

    java技术群:69705156
    欢迎加入
      

  5.   

    一般多采用load 因为可以报错 马上查处问题所在 还可以支持缓存 呵呵
      

  6.   


    get()好像也可以实现在二级缓存查找现有的数据!!!
      

  7.   

    get 查询空值 返回NULLLOAD 查询空值 报异常
      

  8.   

    这两个方法都是根据标识属性的值来加载持久化对象,get方法加载的是实例默认为即时加载,load默认加载的是代理对象,默认为延迟加载。
      

  9.   

      最大的区别:
      1>load先到缓存中去查,如果没有则返回一个代理对象(不马上到DB中去找),等 后面
         使用这个代理对象操作的时候,才到DB中。如还没有找到return Exception
      2>get先到缓存中去查,如果没有就到DB中去查,还没有的话return null
         
            总之,如果你确定DB中有这个对象就用load(),不确定就用get()(这样效率高)