Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。load()方法可返回实体的代理类实例,而get方法永远直接返回实体类。

解决方案 »

  1.   

    get方式马上发出sql,load默认情况下支持延迟加载(lazy),也就是在真正用到的时候在给你查上来,另外get方法也是能返回代理类实例的,文档是这样描述get的:
    Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance. (If the instance, or a proxy for the instance, is already associated with the session, return that instance or proxy.) 
      

  2.   

    一楼说的正确.
    get(),load()或者其他查询方法返回的对象都位于当前session缓存中,检索策略对这些方法的影响也不一样,类级别检索策略 有立即和延迟检索,默认为立即检索,运行时行为只对load()有影响。关联级别有 有立即检索、延迟检索和迫切左外连接检索,多对一和一对一关联默认为外连接检索,一对多和多对多关联为立即检索,运行是行为影响load(),get(),find()
      

  3.   

    过通Sessioin中的get()  load(),
    ObjectPojo pojo = (ObjectPojo)sess.get(ObjectPojo.class, id);
    ObjectPojo pojo = (ObjectPojo)sess.load(ObjectPojo.class, id);
    区别
    1、如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception.
    2、load()方法可以返回实体的代理类实例,而get()永远只返回实体类.
    3、load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接调用SQL完成查找.
      

  4.   

    get方法得到的对象把属性值也加载了,而load只是加载了只包含标识符的对象,当用的时候才加载,load的效率比get高
      

  5.   

    get()方法不支持延迟加载
    load()方法支持延迟加载二个都将查询出来的数据放入cache中去