博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Hibernate] - EAGER and LAZY
阅读量:4576 次
发布时间:2019-06-08

本文共 1958 字,大约阅读时间需要 6 分钟。

Hibernate中的字段映射中的Fetch有两种方式:EAGER和LAZY

Eager:全部抓取

Lazy:延迟抓取

如果在字段中声明为Eager,那么在取得当前Bean时,同时会抓取Bean中的关联Bean值。即数据库查询多次。反之Lazy则在之后抓取提交查询。

 

比如,有如下声明为Eager的User Bean:

@OneToMany(mappedBy="user", cascade=CascadeType.ALL, fetch=FetchType.EAGER)    private Set
cards;

此时使用Join查询时,将会同时把User bean下的cards均一同查询出来:

// ----------------------------------------------------            // Left join            // ----------------------------------------------------            String hql = "SELECT U FROM User U LEFT JOIN U.cards C WHERE U.userName=:userName AND C.cardID=:cardID";            Query query = session.createQuery(hql);            query.setLong("cardID", 1);            query.setString("userName", "Robin");            List
users = query.list(); for (User user : users) { System.out.println("User ID:" + user.getUserID() + "\tUser name:" + user.getUserName()); }

输出的SQL和查询结果:

 

如果把Eager修改为Lazy:

@OneToMany(mappedBy="user", cascade=CascadeType.ALL, fetch=FetchType.LAZY)    private Set
cards;

查询:

// ----------------------------------------------------            // Left join            // ----------------------------------------------------            String hql = "SELECT U FROM User U LEFT JOIN U.cards C WHERE U.userName=:userName AND C.cardID=:cardID";            Query query = session.createQuery(hql);            query.setLong("cardID", 1);            query.setString("userName", "Robin");            List
users = query.list(); for (User user : users) { System.out.println("User ID:" + user.getUserID() + "\tUser name:" + user.getUserName()); }

输出的SQL和查询结果:


 

 

当然,大多数情况下,bean的设计都应该为Lazy

因为如果真要同步查询得到关联对象bean的值,可以在hql中加入FETCH关键字即可完成。

Fetch参考例子:

使用FETCH,如上查询hql可以写为:

String hql = "SELECT U FROM User U LEFT FETCH JOIN U.cards C WHERE U.userName=:userName AND C.cardID=:cardID";

 

转载于:https://www.cnblogs.com/HD/p/3958354.html

你可能感兴趣的文章
数据清洗
查看>>
PHP&MySQL(三)——数组
查看>>
各种语法解释及用法
查看>>
UVA 1388 Graveyard
查看>>
Eclipse使用技巧
查看>>
网络请求之get与post异步请求
查看>>
堆和栈的区别
查看>>
清理内存
查看>>
蓝桥杯之装箱问题
查看>>
Spark常用算子详解
查看>>
JAVA_桥接模式
查看>>
C语言 strcpy,memcpy,memmove,memccpy函数
查看>>
C语言一个小程序的bug疑问 数组相关[已解决]
查看>>
几种排序算法(PHP版)
查看>>
数据库字段数据类型对索引的影响
查看>>
perl6的介绍与下载编译安装
查看>>
mesos cluster
查看>>
Altium Designer 中差分走线
查看>>
linux 解压缩命令
查看>>
GDUT校赛
查看>>