1。load一条不存在的记录
Employee employee2 = (Employee) session.load(Employee.class, new Integer(100));
会抛出net.sf.hibernate.ObjectNotFoundException。
如果不想抛出该Exception, 应该使用session.get(Class clazz, Serializable id);
2. load一条数据库存在的记录
1)如果session的Cache中存在,那么直接返回该引用。
Session session = HibernateSessionFactory.currentSession();
Transaction tx = session.beginTransaction();
Employee employee1 = new Employee();
employee1.setAge((byte)10);
employee1.setBirthDay(new Date());
employee1.setEmployeeName("HairRoot");
employee1.setGender('m');
employee1.setMarried(false);
session.save(employee1);
System.out.println(employee1);
//employ1 已经被保存
Employee employee2 = (Employee) session.load(Employee.class, new Integer(/*employee1.getId()*/100));
System.out.println(employee2);
tx.commit();
session.close();
可以发现employee1和employee2是同一个引用。打开show_sql=true也会发现,hibernate并没有发送一条select语句给数据库。
2)如果session的Cache中不存在,那么会立即发送一条select。
Session session = HibernateSessionFactory.currentSession();
Transaction tx = session.beginTransaction();
Employee employee = (Employee) session.load(Employee.class, new Integer(100));
System.out.println(employee);
tx.commit();
session.close();
后台:Hibernate: select employee0_.id as id0_, employee0_.age as age0_, employee0_.birthDay as birthDay0_, employee0_.employeeName as employee4_0_, employee0_.gender as gender0_, employee0_.married as married0_ from MWS_TEST_EMPLOYEE employee0_ where employee0_.id=?