案例1、
@Test
public void testGet(){
Student stu = session.get(Student.class, new Long(2));
}
@Test
public void testLoad(){
Student stu = session.load(Student.class, new Long(2));
}
PS: 使用 get 方法,Hibernate 会直接发出一条 Select 语句查询数据,而使用 load 方法 不会立即发出 Select 语句查询
案例2、
@Test
public void testGet2(){
Student stu = session.get(Student.class, new Long(2));
System.out.println(stu.getClass().getName());
}
@Test
public void testLoad2(){
Student stu = session.load(Student.class, new Long(2));
System.out.println(stu.getClass().getName());
}
PS:使用 get 方式的到的 是对象本身,使用 load 方式得到的是 一个代理对象
案例3、
@Test
public void testGet3(){
Student stu = session.get(Student.class, new Long(121928));
System.out.println(stu);
}
@Test
public void testLoad3(){
Student stu = session.load(Student.class, new Long(121928));
System.out.println(stu);
}
PS: get 一个不存在id 值,返回null。而 load 一个不存在 id 值 ,会抛出异常。
案例4、
@Test
public void testLoad4(){
Student stu = session.load(Student.class, new Long(2));
session.close();
System.out.println(stu);
}
总结:
1)get 方式得到的是对象本身, load 方式得到的是 对象的代理
2)get 方式会立即加载数据, load 方式延迟加载数据,等到使用该对象时才加载数据
3)get 不存在id 值时,会返回null, 而 load 不存在 id 值时, 抛出异常
4)load 方式得到的数据在 session 关闭后无法使用, 否则会抛出异常