`

load 和 get的区别

阅读更多
session加载数据库数据时,load 和  get


1.load是生成代理对象,调用该对象时才发出sql语句
	public void testLoad() {
	
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Teacher t = (Teacher)session.load(Teacher.class, 1);
		
                  //System.out.println(t.getName());  //此时生成sql语句
		session.getTransaction().commit();
                  System.out.println(t.getName()); //次句会报错ERROR LazyInitializationException,应为load生成的是代理对象,发出sql会有延迟,此处调用发出sql时,session已经关闭,所有会报错no session
 			}


2.get是直接发sql语句
	public void testGet() {
	
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Teacher t = (Teacher)session.get(Teacher.class, 1); //此时生成sql语句
		
		session.getTransaction().commit();
		System.out.println(t.getName());  //不会报错,输出对象t的name,因为t已经查出
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics