惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
U
Unit 42
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
F
Full Disclosure
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园_首页
The Register - Security
The Register - Security
G
Google Developers Blog
The Cloudflare Blog
博客园 - Franky
K
Kaspersky official blog
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
NISL@THU
NISL@THU
AI
AI
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Vercel News
Vercel News
T
Tor Project blog
P
Privacy International News Feed
D
Docker
I
Intezer
L
LangChain Blog
P
Proofpoint News Feed
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
博客园 - 聂微东
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
V
V2EX
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
The Hacker News
The Hacker News
T
Tenable Blog
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog

博客园 - 无会

[转]java取得Linuxcpu,内存,磁盘实时信息 中国32个省的日语读法 26字母日语读法 65个源代码网站 经典面试问题【转】 An introduction to the Java 2 Platform, Enterprise Edition specification by way of BEA's WebLogic Server java 中文网址大全 Struts+Spring+Hibernate整合 自我介绍 [原] 子类访问基类方法 http1.1 MYSQL初学者使用指南 候捷谈Java反射机制 jstl1.0 和 jstl1.1 区别 moiment lrc 日本日記(十二月三日) 自定义Hibernate Dialect解决createSQLQuery时的decimal,long类型问题 hibernate 中 session 说明 java.lang.ClassCastException: org.apache.struts.action.ActionMessage 错误
Hibernate检索策略
无会 · 2007-12-03 · via 博客园 - 无会

Hibernate检索策略:  
立即检索、延迟检索、迫切左外连接检索  
Hibernate检索策略应用对象级别  
类级别、关联级别  
以下表格为类级别和关联级别可选的检索策略及默认的检索策略  

检索策略的作用域  
可选的检索策略  
默认的检索策略  
运行时行为受影响的Session的检索方法  
类级别  
立即加载  
延迟加载  
立即检索  
Load()方法  
关联级别  
立即加载  
延迟加载  
迫切左外连接检索  
多对一或者一对一为迫切左外连接检索  
一对多或者多对多为立即检索  
Get()Load()Find()方法  

以下表格为用于在对象-关系映射文件中设定检索策略的属性  

属性  
可选值  
默认值  
描述  
lazy  
truefalse  
false  
如果为true表示使用延迟加载,如果为false表示使用立即加载  
outer-join  
autotruefalse  
<many-to-one>元素和  
<one-to-one>元素中为auto,在<one-to-many>元素和<many-to-many>元素中为false  

如果为true表示使用迫切左外连接检索。在<many-to-one><one-to-one>、和<set>元素中包含此属性  
如果为false表示使用立即加载  
batch-size  
正整数  
1  
设定批量检索的数量。如果设定此项合理的取值在310之间  

一、类级别的检索策略:  
SessionLoad()Get()Find()方法受到检索策略的影响  
Load()方法的立即检索:立即查询数据库并初始化类实例,查询不到是抛异常  
Load()方法的延迟检索:不检索数据库只返回类的代理实例,举例说明一个Custom  
Custom类通过Session.Load()方法延迟加载持久化对象时,只是将Custom对象的对象标识赋值,并没有操作数据库;当我们访问这个对象的标识属性时也只是简单返回对象标识,并不操作数据库。而当我们访问Custom对象的其它属性时由于没有初始化,所以要检索数据库并赋值给该属性。这个时候要保证此对象的Session连接时正常的。  
Get()方法的检索策略:只有立即加载策略。查询不到返回null  
Find()方法的检索策略:只有立即加载策略。  
如果我们在使用SessionLoad()Get()Find()方法时并不知道检索策略,我们可以在调用这些方法后立即执行以下代码来初始化持久化对象:  
If( !Hibernate.isInitialized(customer))  
{  
         Hibernate.initialize(customer);  
}  
二、关联级别的检索策略  
一对多和多对多关联的检索策略  

lazy属性  
outer-join属性  
检索策略  
false  
false  
采用立即检索,这是默认的检索策略,当使用Hibernate的第二级缓存时,可以考虑采用立即检索。  
true  
false  
采用延迟检索  
false  
true  
采用迫切左外连接检索,对于Hibernate2.0以下,再映射文件中如果有多个<set>元素,只允许有一个<set>元素的outer-join属性为true  
true  
true  
没有任何意义  


注意:对于Session.find()方法会忽略迫切左外连接检索,采用立即检索策略  
多对一和一对一关联的检索策略  
Order对象与Custom对象之间的多对一关系  

Order.hbml.xml  
<many-to-one>元素的  
outer-join属性  
Custom.hbm.xml<class>元素的lazy属性  
检索order对象时对关联的custom对象使用的检索策略  
auto  
true  
延迟检索  
auto  
false  
迫切左外连接检索  
true  
true  
迫切左外连接检索  
true  
false  
迫切左外连接检索  
false  
true  
延迟检索  
false  
false  
立即检索  


批量检索:  
设置<class>元素的batch-size,这样再进行查询时能够在Sql中采用or连接词,减少查询次数。
、提高查询性能:

1、尽量使用迫切连接,以减少查询数据库的次数。

2、对使用延迟加载或者立即检索策略设置批量 查询数目,以检索查询数据库的次数。

3、使用查询缓存

4、有的时候数据量较大,只负责显示的数据可使用Sql查询,以减少缓存空间。

5、尽量减少返回记录集字段的数目,只返回所需要的字段。

6、使用集合过滤,也就是说通过第一次查询的结果来再次进行查询。

二、HQL方式与QBC方式的不同

1、HQL方式功能强大,可实现分组,外连、内连,而QBC则没有这些功能。

2、HQL语句写法接近Sql语句方式,容易上手。

3、HQL语句无法在编译期检查错误。而QBC能够做到。

4、QBC是面向对象的,而HQL语句还不是面向对象编程。

5、QBC能够动态创建查询,而HQL不能

6、QBC提供了接口,扩展性好,HQL方式不具有扩展性。