session.get会立即生成SQL语句去执行
而session.load并不会立即生成SQL语句去执行,会先生成你的对象的代理,当你使用到这个对象的属性时才会生成SQL语句去执行
如:
Teacher t = (Teacher)session.load(Teacher.class,1); session.getTranscation.commit();
执行以上两步并不会报错。
而继续执行:
System.out.println(t.getName());
则会报错。原因就是这时候再去执行SQL的时候session已经关闭了。
总结:load返回的是代理对象,等到真正用到对象的内容时才发出sql语句。
get直接从数据库加载,不会延迟。