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则异常

相关文章:

  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
  • 2021-04-29
  • 2022-12-23
  • 2021-06-17
  • 2021-11-12
猜你喜欢
  • 2021-11-18
  • 2021-12-13
  • 2021-10-17
  • 2022-12-23
  • 2021-06-02
  • 2022-12-23
相关资源
相似解决方案