(hibernate之四)session的load方法和get方法
public void test() { Teacher teacher1=new Teacher(); Teacher teacher2=new Teacher(); //有异常的load /* Session session=sessionFactory.getCurrentSession(); session.beginTransaction(); teacher1=(Teacher)session.load(Teacher.class,9); session.getTransaction().commit(); System.out.println(teacher1.getName()); */ //没有异常的load Session session=sessionFactory.getCurrentSession(); session.beginTransaction(); teacher1=(Teacher)session.load(Teacher.class,9); //这里重点,因为调用getName(),所以load方法才去读取数据库 System.out.println(teacher1.getName()); session.getTransaction().commit(); System.out.println(teacher1.getName()); session=sessionFactory.getCurrentSession(); session.beginTransaction(); teacher2=(Teacher)session.get(Teacher.class,10); session.getTransaction().commit(); System.out.println(teacher2.getName()); }
总结:
1 get方法是直接访问了数据库,当没有相应数据则返回null
2 load方法是延迟加载,返回的是一个代理,当有调用到对象的相关方法时才访问数据库,如果没有相应数据则异常
3 load方法得到的对象必须在session关闭前使用到,不然再访问就异常,因为它的不访问数据库了
最后记住:
1) load延迟加载在session关闭必须先使用,不然后面就不能使用
2) 当没有相应数据时,get返回null,load则异常