hibernate(三)检索属性配置
检索即对象的获取:获取的时机和和方式:减少没必要的内存占用,尽量少的sql语句减少多余数据库的访问
一:类级别的检索:load() 和属性<class lazy=true>
.无论 <class> 元素的 lazy 属性是 true 还是 false, Session 的 get() 方法及 Query 的 list() 方法在类级别总是使用立即检索策略;仅对load()有效
2.默认是延迟加载的即lazy=true;当使用对象属性的时候才真正获取对象(前提是load());
3.根据是获取引用还是属性,是否使用延迟加载;
4.实现延迟加载的原理是使用cglib代理,根据id获取对象时,返回的代理对象只对oid初始化,使用到其他属性才进行初始化代理实例。
二。一:关联对象(一对多和多对多的情况)的检索;<set >元素的 lazy, batch-size fetch 属性值
<set >元素的 lazy属性
1.默认是懒加载关联的集合对象 默认set元素的lazy=true;在使用集合元素并且集合的iterator(), size(), isEmpty(), contains() 等方法也会初始化代理对象。
2在延迟加载的情况下,也可显示的初始化:通过 Hibernate.initialize() 静态方法
3..值可以是lazy=extra :即增强的延迟加载;尽可能延迟加载,如果只是集合的iterator(), size(), isEmpty(), contains() 等方法,只会用特殊的查询语句不会查询具体的数据;(一般不用,因为要得到数据最终还是需要发送语句去查询具体数据)
4.一般不设置为false:有时候并不需要关联对象;在使用一条语句获取第一个对象时,同时再使用一条语句获取关联的对象集合;
<set> 元素 batch-size 属性:用来为延迟检索策略或立即检索策略设定批量检索的数量. 批量检索能减少 SELECT 语句的数目,
一般情况下:
在获取每个客户对应的订单集合对象时,一个客户发送一条语句查询数据;
而通过设置batch-size="数量",让同一种方式获取同一类的对象用in语句(from order where customerId in(客户Id ,..))查询出来,设置的数量决定语句in的客户id数量;
查询语句的数量由总数量和每次查询的数量(batch-size)决定;
<set> 元素的 fetch 属性: 取值为 “select” 或 “subselect” 时, 决定初始化 orders 的查询语句的形式(相当于最大的batch-size值); join值决定加载的时机和方式;
1.默认是select 即普通查询:需参考其他属性;
2.值为subselect时,将忽略batch-size属性,但lazy属性有效;通过一条语句给所有客户关联的集合初始化;因为通过子查询将所有的客户id查出来作为外部语句in的元素(where customerid in(子查询客户id);(注意上面所说的所有(的客户id),只是上条语句查询到session中的客户对象)
3.为 “join” 时:在非Query 的list() 方法获取对象时;将忽略lazy属性(当然batch-size属性此时忽略不忽略没有意义因为它是对于多个对象获取其关联的集合):检索 Customer 对象时, 会采用迫切左外连接(通过左外连接加载的方式使用一条语句把客户和订单数据都获取到)策略来检索所有关联的 Order 对象
二。二(多对一和一对一》many-to-one ><one-to-one>的lazy属性;
lazy属性:
1.lazy默认是proxy:延迟加载
2.lazy为false:立即检索,执行两条语句,一条查询订单,一条查询客户,而查询客户对象时,受到客户对象的配置影响查询的方式不一样(因为是否需要查询出客户中引用的订单)
属性fetch=join:
1.即迫切左连接的方式;一次性将对象及关联对象初始化;
属性bathc-size 注意是<class>元素的属性
一般情况下:
查询每个订单关联的客户都有执行一条查询语句;
用batch-size的值设置数量;使用一条语句(in的方式)给多少个订单对应的客户对象初始化赋值;
总结:对多和对一相似意义的配置属性的位置是不同的;相同之处是list()获取时属性fetch=join将被忽略;
注意双向的一个问题:一个对象关联一个对象,而关联的对象本身也是关联的,是否是延迟加载的,将决定初始化关系对象的方式;
(是否所有的延迟加载的对象都是代理对象?)
hibernate(三)检索属性配置的更多相关文章
- Spark学习笔记-三种属性配置详细说明【转】
相关资料:Spark属性配置 http://www.cnblogs.com/chengxin1982/p/4023111.html 本文出处:转载自过往记忆(http://www.iteblog.c ...
- Spring Boot 系列(三)属性配置&自定义属性配置
在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...
- hibernate属性配置
数据库中一个字段的默认值设为0,当用hibernate插入数据时,没有对该字段进行操作,结果该字段居然不是0,而是空.后来google了一下,发现应该在.hbm.xml文件中添加一些参数定义(示例中的 ...
- hibernate(三)基本配置,log4j、JUnit配置
一.基本配置 1.<property name="hbm2ddl.auto">update</property> 改项配置有4个选项: validate:当 ...
- Sping Boot入门到实战之入门篇(三):Spring Boot属性配置
该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置. 传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...
- 攻城狮在路上(壹) Hibernate(十二)--- Hibernate的检索策略
本文依旧以Customer类和Order类进行说明.一.引言: Hibernate检索Customer对象时立即检索与之关联的Order对象,这种检索策略为立即检索策略.立即检索策略存在两大不足: A ...
- Hibernate的检索方式
Hibernate的检索方式 检索方式(查询的方式) 导航对象图检索方式: 根据已经加载的对象导航到其他对象 Customer customer = (Customer)session.get(Cus ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- atitit.atitit.hb many2one relate hibernate 多对一关联配置..
atitit.atitit.hb many2one relate hibernate 多对一关联配置.. 1. 多对一单向 @ManyToOne 1 1. 其中@JoinColumn 注解 2 2. ...
随机推荐
- 文本框textarea实时提示还可以输入多少文字
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- inupt textarea提示文字(点击消失,不输入恢复)及限制字数
效果: input: textarea: 限100字 源码: input: <input name="textfield" type="text" max ...
- PHP序列化以及反序列化系列[1]--PHP序列化格式的写法
反序列化:对单一的已序列化的变量进行操作,将其转换回 PHP 的值(zval). PHP序列化方式 PHP在序列化的时候会将相应的变量以对应的键值进行储存. 将一个类序列化的话,处理代码主要的 文件: ...
- Codefroces Gym 100781A(树上最长路径)
http://codeforces.com/gym/100781/attachments 题意:有N个点,M条边,问对两两之间的树添加一条边之后,让整棵大树最远的点对之间的距离最近,问这个最近距离是多 ...
- Java JDBC 驱动 MySQL
MySQL: 1>下载地址:http://www.mysql.com/products/connector/ 2> //jdbc:[数据库类型]://[ip地址]:[端口号]/[数据库名] ...
- c# 回调委托
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- easyui的页面等待提示层,即mask
/* * 使用方法: * 开启:MaskUtil.mask(); * 关闭:MaskUtil.unmask(); * * MaskUtil.mask('其它提示文字...'); */ var Mask ...
- Distinct<TSource>(IEqualityComparer<TSource> comparer) 根据列名来Distinct
1. DistinctEqualityComparer.cs public class DistinctEqualityComparer<T, V> : IEqualityComparer ...
- hdoj4906 Our happy ending(2014 Multi-University Training Contest 4)
对于一个定长(size = n)的数列a, 若其存在“位置相关”的子集(含空集)使得该子集所有元素之和为k,那么将数列a计数. 其中数列a中任一元素a[i]在[0, l]内自由取值. 数据条件0≤n, ...
- js九九乘法表
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...