Java就业Hibernate高级:立即与延迟检索及代理机制.pdfVIP

  • 0
  • 0
  • 约2.98千字
  • 约 18页
  • 2026-02-27 发布于北京
  • 举报

Java就业Hibernate高级:立即与延迟检索及代理机制.pdf

知识点1:区分立即检索和延迟检索

查询编号为1的客户

立即检索:立即加载检索方法指定的对象

延迟检索:延迟加载检索方法指定的对象

只针对session.load()方法,不针对get()方法

知识点2:理解延迟检索中的

publicvoidloadCustomertrue(){

Sessionsession=sessionFacoty.openSession();

Transactiontx=session.beginTransaction();

//此时查询到的c对象是一个对象

Customerc=(Customer)session.load(Customer.class,1);

System.out.println(c.getClass());//对象

c.getClass();//hibernate不会执行select语句

c.getId();//hibernate不会执行select语句

c.getAge();//该行hibernate会执行select语句

mit();

session.close();Customer对象

}对象

只有延迟检索会产生对象,立即检索不会产生对象

Customer对象

Hibernate使用javassist-3.9.0.GA.jar包创建

知识点3:区分类级别和关联级别的检索

类级别的检索:

Customerc=(Customer)session.load(Customer.class,1);

session的方法直接检索Customer对象,对Customer对象到底采用立即检索

还是延迟检索方式

通过class元素的lazy属性设定

关联级别的检索:

Customerc=(Customer)session.load(Customer.class,1);

Setset=c.getOrders()//检索Order对象的set集合

在这个例子中

session.load(Customer.class,1):查询的客户表

c.getOrders():查询订单表

查询订表表是否发生,以何种方式发生(立即检索、延迟检索),就是关联级别检索

通过set元素lazy属性设定

知识点4:类级别检索策略

⚫类级别可选的检索策略包括立即检索和延迟检索,默认为延

迟检索

⚫类级别的检索策略可以通过class元素的lazy属性进行

设置

⚫如果程序加载一个对象的目的是为了它的属性,可以采

取立即检索.如果程序加载一个持久化对象的目的是仅仅为

了获得它的,可以采用延迟检索

⚫无论class元素的lazy属性是true还是false,Session的

get()方法及Query的list()方法在类级别总是使用立即检索

策略

⚫若class元素的lazy属性为true或取默认值,Session的

load()方法不会执行查询数据表的SELECT语句,仅返回

类对象的实例,该类实例有如下特征:

•由Hibernate在运行时采用javassist工具动态生成

•Hibernate创建类实例时,仅初始化其OID属性

•在应用程序第一次类实例的非OID属性时,Hibernate会

初始化类实例

知识点5:关联级别的检索策略

⚫在映射文件中,用set元素来配置一对多关联及多对多关联关

系.set元素有lazy属性

•lazy:主要决定orders集合被初始化的时机.即到底是在加载

Customer对象时就被初始化,还是在程

文档评论(0)

1亿VIP精品文档

相关文档