load和get都是从数据库中查询指定主键的记录 。
相同点:都会先查找session缓存,若缓存中有,则直接返回。
不同点:load认为数据库中一定是有这条记录的,所以若不存在,则先会创建一个代理对象,当真正使用这个对象的数据时,才会再去查询二级缓存和数据库,这就是所谓的延迟加载。若查不到,则返回ObjectNotFoundException。而对于get来说,则会直接依次查找二级缓存和数据库,查不到的话,则直接返回null。
@Test
public void HibernateClose() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
// 无-------到持久化
// session可以关闭
// get 数据库没有相应的值这回返回Null
// Temp temp2 = session.get(Temp.class, "a1");
// System.out.println("get" + temp2);
// 不能关闭session
// load 数据库没有相对应的记录则会返回ObjectNotFoundException
Temp temp1 = session.load(Temp.class, "a1");
System.out.println("load" + temp1);
//关闭
session.close();
//提交
transaction.commit();
}