hibernate类级别的检索策略
来源:互联网 发布:数据有效性是什么意思 编辑:程序博客网 时间:2024/06/08 04:47
1、立即检索
在School.hbm.xml文件中,以下表示采用立即检索策略:
<class name="School" table="school" lazy="false">
当采用Session的load方法检索School对象时:
School school = (School)session.load(School.class,new Long(1));
hibernate会理解查询school表的select语句:
select * from school where id=1;
2、延迟检索
类级别的默认检索策略为延迟检索。在School.hbm.xml文件中,以下两种方式都表示采用延迟检索策略
<class name="School" table="school">
或者
<class name="School" table="school" lazy="true">
当执行上诉的session的load方法时,hibernate不会立即执行school表的select语句,仅返回School类的代理实例,这个代理类具有以下特征:
a)由hibernate在运行时同台生成,它扩展了School类,因此它继承了School类的所有属性和方法,但它的实现对于应用程序是透明的。
b)当hibernate创建School类的代理类实例时,仅初始化了它的OID属性,其他的属性都为null,因此这个代理类实例占用的内存很少。
c)当应用程序第一次访问School代理类的实例的属性时(school.getId()除外,原因应该都知道),hibernate会自动初始化代理类实例。在初始化过程中执行select语句,真正从数据库中加载School对象的所有数据。
注意:School代理类的实例只有在当前Session范围内才能被初始化。
org.hibernate.Hibernate类的initialize()静态方法用于在session范围内显示初始化代理类实例,isInitialized()方法用于判断代理类是否已经被初始化。例如:
tx = session.beginTransaction();School school = (School)session.load(School.class,new Long(1));...if(!Hibernate.isInitialized(school)){Hibernate.initialize(school);}tx.commit();session.close();String name = school.getName();//正常执行
注意:不管School.hbm.xml文件的<class>元素的lazy属性是true还是false,Session的get()方法及Query的list()方法在School类级别总是使用立即检索策略。
- hibernate类级别的检索策略
- Hibernate深入学习(四):类级别的检索策略
- 类级别的检索策略
- Hibernate检索策略之类级别检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- 【Hibernate的检索策略】
- hibernate的检索策略
- live555源代码分析
- [ javascript ] javascript自启动函数的问题
- 分页查询
- Cocos2d-x 内存管理剖析(2)
- YII 框架 第十天(4)面包屑导航
- hibernate类级别的检索策略
- Java中的两种代理方式
- android activity 实例加载模式
- 8天学通MongoDB——第二天 细说增删查改
- Objective-C中#pragma mark
- 8天学通MongoDB——第三天 细说高级操作
- 《深入理解计算机系统》网络编程——读书笔记
- jquery php多文件上传
- 8天学通MongoDB——第四天 索引操作