Hibernate延迟加载简单实例及分析_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Hibernate延迟加载简单实例及分析

Hibernate延迟加载简单实例及分析

 2013/11/16 22:01:29  alleni123  程序员俱乐部  我要评论(0)
  • 摘要:Sessionsession=HibernateUtil.openSession();Transactiontx=null;tx=session.beginTransaction();Useruser=(User)session.get(User.class,538);System.out.println(user.getId());tx.commit();session.close();System.out.println(user.getName());Hibernate在使用get方法时
  • 标签:实例 分析 hibernate
class="java" name="code">	Session session = HibernateUtil.openSession();

		Transaction tx = null;

		tx = session.beginTransaction();
		
		User user=(User) session.get(User.class, 538);
	 
		System.out.println(user.getId());
	   
		tx.commit();
		
		session.close();
		
		
		System.out.println(user.getName());


Hibernate在使用get方法时,当程序运行到
User user=(User) session.get(User.class, 538);
就会直接提取出User对象,也就是向数据库发送了select语句。

get方法直接获取实例, 不存在代理。

------------------
这时如果把get换成load, 就会报出一个经典的异常
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at com.lj.zhang.User_$$_javassist_0.getName(User_$$_javassist_0.java)
at com.lj.zhang.HibernateTest5_search2.main(HibernateTest5_search2.java:47)


从上面的异常信息可以看出, hibernate通过javassist生成的代理对象进行了invoke()的调用, 我猜测应该就是这里调用了javassist所生成的对象类的查询方法。
这个生成的对象class的查询方法在运行时是要通过hibernate的一系列的配置对象的,既是SessionImpl, 但是这个东西已经关闭, 所以getImplementation压根无法得到任何Session对象。 抛出异常。
--以上纯属瞎猜,具体如何还待以后看了源码才知道。



发表评论
用户名: 匿名