<set><list>集合上,可以取值:true/false/extra,(默认值为:true)

实例一:(集合上的lazy=true(默认))class默认lazy=true(默认)

session = HibernateUtils.getSession();
tx = session.beginTransaction();
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
//发出SQL语句,因为在使用对象
System.out.println("classes.name=" + classes.getName()); //不会发SQL语句,只会返回一个代理类,因为没有使用对象
Set<Student> students = classes.getStudents();
//会发出SQL语句,因为使用了对象
for (Iterator<Student> iter = students.iterator();iter.hasNext();){
Student student = iter.next();
System.out.println(student.getName());
}
//提交事务 tx.commit();

实例二:集合上的lazy=true(默认)class已经设置懒加载,class默认lazy=true(默认)

session = HibernateUtils.getSession();

            tx = session.beginTransaction();
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
//发出SQL语句,因为在使用对象
System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,只会返回一个代理类,因为没有使用对象
Set<Student> students = classes.getStudents();
//会发出SQL语句,发出查询全部数据的SQL,效率不高
System.out.println("student.count=" + students.size());
//提交事务 tx.commit();

实例三:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

          //不会发出SQL语句,因为只设置了集合上的lazy为false,其它保持默认
Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句,分别加载classes和student
//并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,因为已经在前面加载了数据 Set<Student> students = classes.getStudents();
for (Iterator<Student> iter = students.iterator();iter.hasNext();){ Student student = iter.next(); System.out.println(student.getName()); }

实例四:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

//不会发出SQL语句

        Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句,分别加载classes和student
//并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false
System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,因为已经在前面加载了数据
Set<Student> students = classes.getStudents();
//不会发SQL语句,因为已经在前面加载了数据
System.out.println("student.count=" + students.size());

实例五:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

session = HibernateUtils.getSession();

            tx = session.beginTransaction();
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
////发出两条SQL语句
System.out.println("classes.name=" + classes.getName()); //不会发出SQL语句,只返回代理类
Set<Student> students = classes.getStudents();
//会发出SQL语句
for (Iterator<Student> iter = students.iterator();iter.hasNext();){
Student student = iter.next();
System.out.println(student.getName());
}
//提交事务
tx.commit();

实例六:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

session = HibernateUtils.getSession();
tx = session.beginTransaction()
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句
System.out.println("classes.name=" + classes.getName());
//不会发出SQL语句,只返回代理类
Set<Student> students = classes.getStudents();
//发出SQL语句,发出一条比较智能的SQL语句(select count(id) form t_student where classesid=?) //和lazy=true相比,效率高 System.out.println("student.count=" + students.size()); //提交事务 tx.commit();

019 关联映射文件中集合标签中的lazy(懒加载)属性的更多相关文章

  1. 018 关联映射文件中<class>标签中的lazy(懒加载)属性

    Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...

  2. 020 <one-to-one>、<many-to-one>单端关联上的lazy(懒加载)属性

    <one-to-one>.<many-to-one>单端关联上,可以取值:false/proxy/noproxy(false/代理/不代理) 实例一:所有lazy属性默认(支持 ...

  3. vue中页面卡顿,使用懒加载

    为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...

  4. hibernate 中 fetch=FetchType.LAZY 懒加载失败处理

    对这种懒加载问题,最后的做法是利用Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,使得Hi ...

  5. hibernate之xml映射文件关系维护,懒加载,级联

    一:关系维护 --->inverse默认值false,表示不放弃关系的维护.   --->inverse="true"配置在那一端,表示那一端xml对应的po放弃关系的 ...

  6. hibernate中的懒加载和急加载

    懒加载(FatchType.LAZY)是Hibernate为提高程序执行效率而提供的一种机制,简单说就是只有正真使用其属性的时候,数据库才会进行查询. 具体的执行过程就是:Hibernate从数据库获 ...

  7. Angular中懒加载一个模块并动态创建显示该模块下声明的组件

    angular中支持可以通过路由来懒加载某些页面模块已达到减少首屏尺寸, 提高首屏加载速度的目的. 但是这种通过路由的方式有时候是无法满足需求的. 比如, 点击一个按钮后显示一行工具栏, 这个工具栏组 ...

  8. spring 加载属性(properties)文件

    在开发的过程中,配置文件往往就是那些属性(properties)文件,比如使用properties文件配置数据库文件,又如database-config.properties 代码清单:databas ...

  9. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

    html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

随机推荐

  1. Hibernate(四)之对象状态及一级缓存

    一.Hibernate中的对象状态 1.1.瞬时态(临时态) 没有与Hibernate产生关联 与数据库中的记录没有产生关联(有关联就是与数据库中表的id相对应) 获得:一般都只直接创建(new) 瞬 ...

  2. 图的基本算法(BFS和DFS)(转载)

    图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系.对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示. 图可以分为有向图和无向图,一般用G=(V,E)来表示图. ...

  3. mysql 分析5语句的优化--索引添加删除

    查看表的索引  show create table 表名; show index from 表名; show keys from表名; 添加索引 alter table 表名  add index 索 ...

  4. JavaScript Break 和 Continue 语句

    1.break:终止本层循坏,继续执行本次循坏后面的语句: 当循坏有多层时,break只会跳过一层循坏 2.continue:跳过本次循坏,继续执行下次循坏 对于for循环,continue执行后,继 ...

  5. Linux Smaba服务器配置

    Linux系统默认已经安装了Samba,但是没有安装Samba服务: 1,先查看安装情况:rpm -qa|grep samba 根据系统的安装情况选择下载或者通过光驱安装所缺的rpm包. 我的安装情况 ...

  6. hexo工具介绍及使用方法

    Hexo is a fast, simple & powerful blog framework 安装方法:npm install hexo-cli -g; require:node.js g ...

  7. React-Native 之 项目实战(五)

    前言 本文 有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我讨论. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关,如文中内 ...

  8. Vim常用操作-快速删除括号中内容。

    如果你和我一样,希望拥有众多工具,发挥工具最大执行效率,让工作事半功倍的话,我推荐你来使用下 Vim. 刚接触Vim 会觉得它的学习曲线非常陡峭,要记住很多命令,操作太复杂.所以这个系列的分享,不会教 ...

  9. LeetCode 376. Wiggle Subsequence 摆动子序列

    原题 A sequence of numbers is called a wiggle sequence if the differences between successive numbers s ...

  10. 设计模式之“Observer”注疏#01

    原文首发于我的微信公众号:GeekArtT. Observer设计模式是为了解决"信息同步更新"的问题而存在的.它试图解决这样一个问题:如果有"一堆对象"都跟随 ...