`

Hibernate part 4:Session中get()/load()详解

 
阅读更多

 

get():

	@Test
	public void testGet() {
		Session session = HibernateUtils.openSession();
		Transaction transaction = session.beginTransaction();
		transaction.begin();
		
		Customer c = (Customer) session.get(Customer.class, 1);
		System.out.println(c);
		
		transaction.commit();
		session.close();
	}

 根据ID查询数据,立即加载数据,查询后返回的也是Customer对象,如果数据不存在返回null

 

load():

 

@Test
	public void testLad() {
		Session session = HibernateUtils.openSession();
		Transaction transaction = session.beginTransaction();
		transaction.begin();
		
		Customer c = (Customer) session.load(Customer.class, 1);
		System.out.println(c);
		
		transaction.commit();
		session.close();
	}
 根据ID查询数据,延迟加载数据,当访问Customer类中的某个属性是才会触发查询,返回的也不是Customer对象,是一个代理对象,默认代理对象的数据都为null,如果对象不存在抛出 ObjectNotFoundException 异常
 这里面handler相当于一个回调函数,当调用Customer对象的一个属性时,通过handle执行查询

 handler未初始化


 
 handler初始化后


 

 如果Customer类被声明为final,load()延迟加载的策略会被转换为get()立即加载

  • 大小: 13.4 KB
  • 大小: 5.6 KB
  • 大小: 360.5 KB
  • 大小: 327.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics