lazy
策略可以用在:
* <class>标签上:可以取值true/false
* <property>标签上,可以取值true/false,这个特性需要类增强
*
<set>/<list>等集合上,可以取值为true/false/extra
* <one-to-one>/<many-to-one>等标签上,可以取值false/proxy/no-proxy
重要的概念:
1、lazy
的概念,指在需要的时候才发出sql
2、lazy
策略只是在session打开期间才是有效的
注意:
Hibernate
类级别的lazy
加载策略:可以控制什么时候加载这些普通对象属性
测试单元的使用:
请先运行初时化程序InitData,在执行每个单元测试
Hibernate
集合属性的懒加载策略:
在集合属性上,可以配置懒加载策略,取值为:true/false/extra
true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其
集合元素的数据
false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据
extra
:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate
并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
Hibernate
单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置
懒加载策略。
可以取值为:false/proxy/no-proxy
false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象
proxy:这是hibernate
对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候
才真正发出查询语句查询其对象数据,其关联对象是代理类
no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类
注意:在class标签上配置的lazy
属性不会影响到关联对象!!!
-
<hibernate
-mapping>
-
<
class
name=
"com.bjsxt.hibernate
.Group"
table=
"t_group"
>
-
<id name=
"id"
>
-
<generator
class
=
"native"
/>
-
</id>
-
<property name=
"name"
/>
-
</
class
>
-
</hibernate
-mapping>
<hibernate
-mapping>
<class name="com.bjsxt.hibernate
.Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate
-mapping>
-
package
com.bjsxt.hibernate
;
-
import
org.hibernate
.Session;
-
-
import
com.bjsxt.hibernate
.Group;
-
import
com.bjsxt.hibernate
.HibernateUtils;
-
-
-
public
class
InitData {
-
-
public
static
void
main(String[] args) {
-
Session session =
null
;
-
try
{
-
session = HibernateUtils.getSession();
-
session.beginTransaction();
-
Group group =
new
Group();
-
group.setName(
"java开发组"
);
-
session.save(group);
-
session.getTransaction().commit();
-
}
catch
(Exception e) {
-
e.printStackTrace();
-
session.getTransaction().rollback();
-
}
finally
{
-
HibernateUtils.closeSession(session);
-
}
-
}
-
-
}
package com.bjsxt.hibernate
;
import org.hibernate
.Session;
import com.bjsxt.hibernate
.Group;
import com.bjsxt.hibernate
.HibernateUtils;
public class InitData {
public static void main(String[] args) {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Group group = new Group();
group.setName("java开发组");
session.save(group);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
-
-
package
com.bjsxt.hibernate
;
-
-
import
org.hibernate
.Session;
-
-
import
junit.framework.TestCase;
-
-
-
-
-
-
-
-
-
public
class
ClassLazyTest
extends
TestCase {
-
-
public
void
testLoadGroup1() {
-
Session session =
null
;
-
try
{
-
session = HibernateUtils.getSession();
-
-
-
Group group = (Group)session.load(Group.
class
,
1
);
-
-
-
System.out.println(
"group id="
+ group.getId());
-
-
-
System.out.println(
"group name="
+ group.getName());
-
-
-
System.out.println(
"group name="
+ group.getName());
-
}
catch
(Exception e) {
-
e.printStackTrace();
-
}
finally
{
-
HibernateUtils.closeSession(session);
-
}
-
}
-
-
public
void
testLoadGroup2() {
-
Session session =
null
;
-
Group group =
null
;
-
try
{
-
session = HibernateUtils.getSession();
-
-
-
group = (Group)session.load(Group.
class
,
1
);
-
-
}
catch
(Exception e) {
-
e.printStackTrace();
-
}
finally
{
-
HibernateUtils.closeSession(session);
-
}
-
-
-
System.out.println(
"group name="
+ group.getName());
-
-
}
-
-
-
}
分享到:
相关推荐
这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...
在这个场景中,我们关注的是"hibernate的lazy策略forClass",这涉及到如何对类的属性进行懒加载配置。 首先,我们需要理解Hibernate中的实体类(Entity)。在Hibernate中,一个Java类可以被映射为数据库中的一个表...
标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合类(如List、Set等)的懒加载。这篇文章可能详细解释了Hibernate在集合懒加载方面的实现方式以及其背后的原理。 懒加载的主要目的是...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...
标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...
`lazy`属性是Hibernate中用于控制数据加载策略的一个关键参数,主要用于延迟加载关联对象。当一个对象被加载时,与其关联的对象不一定立即加载到内存中,而是等到真正需要使用时才加载,这就是懒加载(Lazy Loading...
这是HIBERNATE默认的抓取策略,当一个实体被加载时,与之关联的实体或集合并不会立即加载,而是采用延迟加载(Lazy Loading)的方式。当第一次访问关联实体或集合时,HIBERNATE会额外发送一条SELECT语句来抓取数据,...
标题中的“hibernate在单端关联上的lazy策略”指的是Hibernate框架中的一种对象关系映射(ORM)技术,用于优化数据加载效率。在Hibernate中,懒加载(Lazy Loading)是一种延迟加载策略,它允许我们在需要时才加载...
在Java的持久化框架Hibernate中,数据访问优化是至关重要的,而抓取策略(Fetch Strategy)和懒加载(Lazy Loading)则是实现这一目标的关键技术。本文将深入探讨这两个概念,并通过具体的案例进行分析。 首先,让...
默认情况下,Hibernate采用懒加载(Lazy Loading)策略,即只有当真正需要访问关联对象时,才会去数据库加载。但这种策略可能导致大量的N+1查询问题,尤其是在处理集合时尤为明显。为了解决这个问题,Hibernate提供...
Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...
当我们设置Hibernate中的实体属性`lazy=true`时,这是懒加载(Lazy Loading)机制的体现。懒加载是一种优化策略,它允许我们在需要时才加载关联的对象,而不是在初始加载实体时就加载所有关联数据,从而提高性能。 ...
默认情况下,Hibernate使用Lazy策略,这意味着关联对象不会立即加载,除非显式访问它们。这有助于提高应用程序的性能,因为不必要的数据不会被加载到内存中。 #### 2. Lazy与Fetch结合的场景分析 在提供的代码示例...
今天我们要讨论的是Hibernate框架中的一个关键概念——抓取策略,特别是针对"many-to-one"关系的抓取策略。这篇博客将深入剖析这个主题,帮助你更好地理解和应用Hibernate。 Hibernate是Java领域中最流行的对象关系...
2. **Lazy Loading**: 默认情况下,Hibernate采用懒加载策略,只有在实际访问关联对象时才会发起数据库查询。这有助于提高性能,因为不是所有的关联数据都立即加载。 3. **Eager Loading**: 相反于懒加载,急加载会...
### Hibernate的检索策略详解 #### 一、概述 在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码...
在Java持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,用于提高应用程序的性能和效率。懒加载的基本思想是“按需加载”,即在实际需要数据时才进行数据库查询,而不是在对象初始化时一次性加载所有...
【hibernate面试题2】涉及了许多关于Hibernate框架的核心知识点,包括检索策略、SQL日志显示、缓存策略以及Hibernate与其他技术(如Spring和Struts)的整合。下面将逐一详细解析这些概念。 1. **Hibernate检索策略*...
在`hibernate_fetch_1`示例中,我们了解到Hibernate的加载策略,包括Eager Fetching(即时加载)和Lazy Fetching(延迟加载)。即时加载会在查询时一起加载关联的对象,而延迟加载则只在真正需要时才执行数据库查询...