Hibernate深入学习(五):集合的检索策略
来源:互联网 发布:python dateutil 编辑:程序博客网 时间:2024/06/05 08:52
hibernate提供了两类检索策略:类级别的懒加载,集合的懒加载
本文采用前篇博客的实体类和映射文件,并设置Parent.hbm.xml中class元素的lazy=false
<class name="Parent" lazy="false">
集合的懒加载主要在一对多中一方实体映射文件的set元素中设置,Parent.hbm.xml如下:
为节约篇幅,省略property等元素
<hibernate-mapping package="cn.sina.bean"> <class name="Parent" table="lazy_parent" lazy="false"> <set name="childrens" lazy="true"> <key column="pid"/> <one-to-many class="Children"/> </set> </class></hibernate-mapping>
同样的,本文使用load方法进行测试,代码如下:
@Testpublic void testLazy(){ Parent parent = (Parent) session.load(Parent.class, 1); System.out.println(Hibernate.isInitialized(parent.getChildrens()));}
输出:
Hibernate: select parent0_.pid as pid1_0_, parent0_.name as name1_0_ from lazy_parent parent0_ where parent0_.pid=?false
可以看到发出的sql只查询了parent表,isInitialized的返回值也是false,说明set元素的lazy=true时,确实发生了懒加载,以下将不测试lazy=false的情况,请读者自行测试(只改为lazy=false即可),着重测试lazy=extra
lazy=extra
extra表示hibernate将尽可能晚的懒加载
<set name="childrens" lazy="extra">
如果我们只是想获取set集合的size,那么extra就会起作用,通过代码说明:
@Testpublic void testLazy(){ Parent parent = (Parent) session.load(Parent.class, 1); System.out.println(parent.getChildrens().size());}
输出为:注意看第二条sql
Hibernate: select parent0_.pid as pid1_0_, parent0_.name as name1_0_ from lazy_parent parent0_ where parent0_.pid=?Hibernate: select count(cid) from lazy_children where pid =?2
说明调用size()只发出count(id)的sql
类似的还有contains()和isEmpty(),其中isEmpty()和size()发出的是同一条sql,下面看看contains()的sql
测试代码:
@Testpublic void testLazy(){ Parent parent = (Parent) session.load(Parent.class, 1); Children children = new Children(); children.setId(2); children.setName("cds"); System.out.println(parent.getChildrens().contains(children));}
注意,我的数据库中id为2的记录,name不为cds,这主要和hibernate发出的sql有关
输出只看一条:
select 1 from lazy_children where pid =? and cid =?true
可以看到这用外键做了查询
以上就是集合的检索策略。
0 0
- Hibernate深入学习(五):集合的检索策略
- Hibernate深入学习(四):类级别的检索策略
- Hibernate(五)---检索策略
- Hibernate框架(五)检索策略
- 【Hibernate学习笔记】Hibernate的检索策略
- hibernate的检索策略(抓取策略)
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- Hibernate的检索策略
- mac安装pip
- Win7 IIS建站
- Java(Android)中线程池的使用
- 海量数据处理专题
- Get Java System Properties and Get OS Envs
- Hibernate深入学习(五):集合的检索策略
- Android N和YunOS强势杀入车载OS市场,整车厂亟待加强软件能力!
- junit测试
- spring四种依赖注入的方式
- STRUTS2 基本知识(疯狂书)
- Macmini安装Android开发环境
- GPIO_Mode
- android 对软键盘的显示和消失监听
- 基础总结篇之一:Activity生命周期