举个例子吧:
Child <- many-to-one ->Parent
class Child {
private Parent parent;
public Parent getParent (){
return this.parent;//访问了实例变量
}
}
class Parent {
private String name;
public String getName(){
return this.name;//访问了实例变量
}
public void f(){
System.out.println("invokeing f()");//没有访问实例变量
}
}
如果 many-to-one 的lazy设为proxy,当child.getParent().getName()或child.getParent().f()时,parent都会被抓取,若设为no-proxy,调用child.getParent().f()时,parent是不会被抓取的,同时这种方式需要编译时字节码增强,否则和proxy没区别。 (注:测试发现真和proxy一样,不能理解 编译时字节码增强,要再哪修改,或是什么条件?)
如果设置了 lazy="proxy",就当通过 child 来调用其关联的 parent, 如果调用 parent 类中定义的任何方法,都会抓取 parent (所谓的抓取是不是就是从数据库查询,执行一次 select ?)
如果设置了 lazy="no-proxy" ,只有调用 parent 类中牵涉到类变量的方法,才会抓取 parent,否则,就像调用 f(), 不会抓取 parent
"编译时字节码增强" 是什么意思?
"字节码增强"分编译期和运行期2种,编译期是修改java类编译后的class字节码文件,在上面附加“增强”操作。(不明白why?)
lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。注意,如果constrained="false", 不可能使用代理,Hibernate会采取预先抓取!
原帖地址:http://apps.hi.baidu.com/share/detail/38568475
分享到:
相关推荐
在 Hibernate 中,为了将 Java 对象映射到数据库表,并实现对象关系映射(ORM),开发者需要定义一系列配置属性来指导 Hibernate 如何进行转换。本文将详细解析 `hibernate-mapping` 文件中的各种关键配置项及其含义...
标题中的“Hibernate lazy加载FOR Connection”指的是Hibernate框架中的一种特性,即懒加载(Lazy Loading)。在Hibernate中,懒加载是一种优化策略,它推迟对关联对象的加载,直到真正需要使用这些对象时才进行加载...
16.4.3 无代理延迟检索(lazy属性为“no-proxy”) 16.4.4 立即检索(lazy属性为“false”) 16.4.5 批量延迟检索和批量立即检索(使用batch-size属性) 16.5 控制迫切左外连接检索的深度 16.6 在应用程序...
Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...
当你尝试在Controller层或者视图层访问懒加载的属性时,如果Session已经关闭("no Session..."错误),就会抛出`org.hibernate.LazyInitializationException`。这是因为懒加载的代理对象需要Session来执行数据库查询...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...
在4.2.20.Final版本中,Hibernate进行了性能优化,如延迟加载(Lazy Loading)、批处理(Batch Processing)、预加载(Preloading)等,以减少数据库访问次数,提升应用性能。 七、事件监听器 Hibernate允许开发者...
- **懒加载(Lazy Loading)**: 延迟加载关联对象,直到真正需要时才从数据库中加载。 - **级联操作(Cascading)**: 在保存、更新或删除一个对象时,自动处理其关联对象的状态。 - **代理(Proxy)**: 用于实现...
在Hibernate中,代理类(Proxy)是其实现懒加载(Lazy Loading)机制的核心组件之一。懒加载是一种优化技术,用于延迟对象的初始化直到真正需要使用该对象时。 在Hibernate框架中,实体类的实例通常对应数据库中的...
- **懒加载(Lazy Loading)**:默认情况下,Hibernate采用懒加载策略,只在真正需要关联数据时才加载,从而避免不必要的数据库交互。 - **急加载(Eager Loading)**:可以在特定场景下启用,一次性加载所有关联...
在Hibernate中,这种机制被称为延迟加载(lazy loading),它通过代理模式实现了对关联实体的按需加载,极大地提升了系统性能。 ### 五、Lazy Loading的应用场景与考虑因素 在实际开发中,Lazy Loading特别适用于...
4. 单端关联(One-to-one, many-to-one)的延迟加载:`<one-to-one>`和`<many-to-one>`元素的`lazy="proxy"`、`lazy="false"`或`lazy="noproxy"`可以控制关联对象的延迟加载行为。`lazy="proxy"`会在访问关联对象时...
6. **代理(Proxy)**: Hibernate 使用动态代理来实现延迟加载,当尝试访问延迟加载的对象时,才会生成真正的对象实例。 7. **事件监听器(Event Listeners)**: Hibernate 允许注册监听器,监听特定的持久化事件,...
- **代理(Proxy)**:Hibernate生成的对象可能是代理对象,用于实现懒加载和级联操作。 - **事件监听器**:通过实现特定接口,可以在对象的生命周期事件中添加自定义逻辑。 - **方言(Dialect)**:适配不同的...
- `lazy="proxy"`:表示Hibernate将为`Dept`实体创建一个代理对象,只有当真正访问到`Dept`对象的相关属性时,Hibernate才会发起数据库查询,加载实际的`Dept`对象。 - `fetch="select"`:默认值,表示在查询`Emp`时...
在 Hibernate 框架中,延迟加载(Lazy Loading)是一种非常重要的优化技术,它能够有效地减少数据库查询次数,提高应用性能。通常,在多对多或者一对多的关系中,延迟加载能够避免 N+1 查询问题。本文将详细探讨 ...
在这个“hibernate JAR包”中,我们通常会找到一系列与Hibernate 3.3.2版本相关的库文件,这些文件是开发基于Hibernate的应用程序所必需的。 首先,Hibernate 3.3.2是Hibernate框架的一个稳定版本,发布于2009年。...
- `lazy`属性用于控制关联对象的加载策略,`proxy`表示懒加载,`no-proxy`表示立即加载。 了解并掌握这些配置方法,可以帮助开发者更有效地实现Hibernate中的一对一映射,提高代码的可读性和维护性。
3. 多对一关联:`lazy="proxy"`(延迟加载)、`lazy="no-proxy"`(无代理延迟加载)或`lazy="false"`(立即加载),默认为`proxy`。 **`load()`与`get()`的区别** 1. **加载方式**:`load()`采用延迟加载,`get()`...
`hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...