(4)hibernate延迟加载
程序员文章站
2024-03-26 14:08:05
...
void test01() {
Session session=null;
try {
session=HibernateUtil.getSession();
session.beginTransaction();
User u1=(User)session.load(User.class, 1);
System.out.println(u1.getId());//不需要发sql,因为代理对象就有id
System.out.println(u1.getNickname());//需要发sql
User u2=(User)session.get(User.class, 118);//返回的是null
System.out.println(u2.getNickname());//空指针异常
User u3=(User)session.load(User.class, 118);//返回的是代理对象,有id的值
System.out.println(u3.getNickname());//此时对象id不为空,但是其他值为null,所以抛出ObjectNotFoundException
session.getTransaction().commit();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtil.closeSession(session);
}
}
注意:(1).延迟加载:当完成load操作后,并不会马上发出sql,只有用到该对象时才会发sql,如果没有用到该对象,返回的u其实是一个代理对象,里面只有id的值,load可以实现延迟加载,get不行
public class UserDao {
public User load01(int id) {
Session s=null;
User u=null;
try {
s=HibernateUtil.getSession();
s.beginTransaction();
u=(User)s.load(User.class, id);
s.getTransaction().commit();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
s.getTransaction().rollback();
}finally{
HibernateUtil.closeSession(s);
}
return u;
}
public User load02(int id) {
Session s=null;
User u=null;
try {
s=HibernateUtil.getSession();
s.beginTransaction();
u=(User)s.get(User.class, id);
s.getTransaction().commit();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
s.getTransaction().rollback();
}finally{
HibernateUtil.closeSession(s);
}
return u;
}
}
try {
UserDao ud=new UserDao();
User u=ud.load01(5);
System.out.println(u.getNickname());
User u=ud.load02(5);
System.out.println(u.getNickname());
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
注意:(1).load01使用load,load有延迟加载,返回的u是代理对象,当取u的其他属性,却取不了,因为session已经关闭,所以抛出session关闭异常
(2).load02使用get,没有延迟加载,返回的是查到的对象,所以没有异常
上一篇: MyBatis中延迟加载
推荐阅读
-
MyBatis中延迟加载
-
js 延迟加载的方式有哪些?
-
(4)hibernate延迟加载
-
hibernate基础(十):延迟加载(懒加载)
-
Mybatis延迟加载配置
-
Mybatis延迟加载:association和collection实现延迟加载
-
SpringMVC_3.x_入门指南_4 博客分类: SpringMVC SpringMVC连接Hibernate框架整合
-
struts2,hibernate4,spring3配置时问题汇总及解决办法 博客分类: hibernate4spring2struts2 struts2hibernate4spring3配置时问题汇总及解决办法
-
瀑布式 区域 延迟加载 博客分类: jquery
-
瀑布式 区域 延迟加载 博客分类: jquery