hibernate load懒加载图文介绍



hibernate的load懒加载hibernate的load懒加载

hibernate的load懒加载

1.但我们通过主键去查询时,使用get和load。区别是get会查询所有的属性,不存在懒加载问题,而load就会有懒加载的问题。

public static void main(String[] args) {
//add();
Student s=lazytest();
System.out.print(s.getName()+”……部门号”+s.getDept().getId());
}
public static Student lazytest(){
Session session=null;
Transaction ts=null;
Student stu=null;
try {
session=GetSessionFactory.getcurrentsession();
ts=session.beginTransaction();
stu=(Student)session.get(Student.class, 3);
Hibernate.initialize(stu.getDept());
ts.commit();
} catch (Exception e) {
// TODO: handle exception
}
return stu;
}
使用get不存在懒加载,可以在session关闭后查出里面的数据。 而把get改为load后就会出错。
2.load的懒加载
当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性时,才会向数据库发出再一次的查询.这种现象我们称为 lazy现象.

解决方法可以这样:

1.       显示初始化 Hibernate.initized(代理对象)

2.       修改对象关系文件 lazy  改写 lazy=false

3.       通过过滤器(web项目) openSessionInView

(1) 显示初始化 Hibernate.initized(代理对象) 
public static void main(String[] args) {

//add();

Student s=lazytest();

//System.out.print(s.getName());

}

public static Student lazytest(){

Session session=null;

Transaction ts=null;


Student stu=null;

try {

session=GetSessionFactory.getcurrentsession();

ts=session.beginTransaction();

stu=(Student)session.load(Student.class, 3);
//强制hibernate去查询。

Hibernate.initialize(stu.getDept());

ts.commit();

} catch (Exception e) {

// TODO: handle exception

}

return stu;

}
(2)  修改对象关系文件 lazy  改写 lazy=false 

<hibernate-mapping>

<class name=”com.ru.domain.Student” lazy=”false” table=”Student”>