hibernate之4.延迟载入
2024-08-31 12:08:52
延迟载入:
仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库
get不支持延迟载入
@Test
public void getTest(){
Session session=null;
Student student=null;
try{
session=HibernateUtil.openSession();
student=(Student) session.get(Student.class, 3);
System.out.println("id:"+student.getStudentId());
System.out.println("name:"+student.getStudentName());
}finally{
session.close();
}
}结果:
Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
id:3
name:ddddd在调用get方法时,就已经发出查询语句
load支持延迟载入
@Test
public void loadTest(){
Session session=null;
Student student=null;
try{
session=HibernateUtil.openSession();
student=(Student) session.load(Student.class, 3);
System.out.println("id:"+student.getStudentId());
System.out.println("name:"+student.getStudentName());
}finally{
session.close();
} }结果:
id:3
Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=?
name:ddddd在调用load方法,返回一个代理对象,此时并没有发出查询语句,当须要使用studentName属性时,再发出查询语句
关闭session后
get:
@Test
public void get2Test(){
Session session=null;
Student student=null;
try{
session=HibernateUtil.openSession();
student=(Student) session.get(Student.class, 3);
}finally{
session.close();
}
System.out.println("id:"+student.getStudentId());
System.out.println("name:"+student.getStudentName());
}结果:
Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, student0_.age as age0_0_ from t_student student0_ where student0_.student_id=? id:3
name:ddddd与在session作用域中的结果一样
load
@Test
public void load2Test(){
Session session=null;
Student student=null;
try{
session=HibernateUtil.openSession();
student=(Student) session.load(Student.class, 3);
}finally{
session.close();
}
System.out.println("id:"+student.getStudentId());
System.out.println("name:"+student.getStudentName());
}结果:
id:3
org.hibernate.LazyInitializationException: could not initialize proxy - no Session抛异常了,可见延时载入仅仅在session的作用域内有效
小结:
1.仅仅有当使用以实体对象的属性(除主键属性外)时,才会发送查询语句到数据库
2.延时载入仅仅在session的作用域内有效
最新文章
- c语言内存原理
- selenium获取Cookie操作
- IO复用三种方式
- GDB中汇编调试
- 【转】Hibernate级联注解CascadeType参数详解
- win7 下加载MSCOMCTL.OCX
- 一个不错的安卓下ssh客户端
- CentOS 6.5 EasyPR环境搭建
- s3c2440 J-flash 烧写 NOR flash
- Java:文件类File的详解
- javascript 关于闭包的知识点
- 【网络协议】TCP中的四大定时器
- angularjs-1.3代码学习 模块
- [ 随手记6 ] C/C++ 形参、实参、按值传参、指针传参、引用传参
- LinkedBlockingQueue源码分析
- b总结
- CC2 条理分明-----AACTP教你谈恋爱
- CentOS下安装VirtualBox
- url中传递中文参数时的转码与解码
- java学习之switch 等值判断
热门文章
- Android 获取屏幕截图 和保存到本地的sd卡路径下
- 在Kali上安装打印机
- 解析RecyclerView(2)——带顶部View和底部View的RecyclerView
- 敬请关注 Linr 公众号
- Golden Gate 相关组件介绍:
- Sentry: Python 实时日志平台
- Ubuntu 16.04安装Caffe的记录及FCN官方代码的配置
- Ubuntu下快速配置Caffe
- vue 中判断向上滚动还是向下滚动
- 解决MYSQL的错误:Got a packet bigger than 'max_allowed_packet' bytes