load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常;
get方法检索不到的话会返回null;
2.从检索执行机制上对比:
load方法的执行则比较复杂首先查找session的persistent Context(一级缓存)中是否有缓存,如果有则直接返回,如果没有则去查找二级缓存,如果有则返回,如果没有则判断是否是lazy,若不是lazy,直接访问数据库检索,查到记录返回(并且同时在二级缓存中存放查到的数据方便下次使用,若再下次使用时在二级缓存命中,就是查到数据,则有可能将数据放到一级缓存中。),查不到抛出异常。?若是lazy,则返回代理对象,而不到数据库中查找,除非使用此对象时,才到数据库中查找。
get方法先到一级缓存,然后二级,最后db查找。
拓展资料
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。?
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Hibernate是一个以LGPL(Lesser GNU Public License)许可证形式发布的开源项目。在Hibernate官网上有下载Hibernate包的说明。Hibernate包以源代码或者二进制的形式提供。
参考资料:搜狗百科Hibernate词条
·get方法是直接获取对象,如果要获取的对象不存在则返回null
·load方法是按需初始化给代理对象,如果要获取的对象不存在,会抛出异常
按需初始化?就是使用时才初始化。
譬如说:
cat cat=session.load(cat.class , 1);
transaction.commit();
这种情况下,cat是什么也没有,即null
要使cat真正的被初始化,需要使用cat,即调用cat的某一方法。
譬如:
cat cat=session.load(cat.class , 1);
system.out.println(cat.getid());
transaction.commit();
此时的cat才是一个真正cat对象。
这就是按需初始化。
1.get()采用立即加载方式,而load()采用延迟加载;
get()方法执行的时候,会立即向数据库发出查询语句,
而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句
2.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException
hibernate的get/load的根本区别分为4点:第一点是:load会抛出异常,get会返回空,一般采用的load方法。第二点是:get只返回实体对象实例。而load返回的是代理类实体对象实例。第三点是:get方法只能使用一级缓存。而load可以使用一级和二级缓存。第四点是:都是通过id得到单个对象的方法。