`
wzf7065
  • 浏览: 249300 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate懒加载机制(转)

 
阅读更多

原文来源:http://blog.csdn.net/zhang6622056/article/details/7694176

                  http://superleo.iteye.com/blog/243322/

 

在关系模型的对应关系中一对一、一对多、和多对多。都已经做了相关案例Hibernate在提供这些查询的时候它有一种懒加载的机制。比如:  之前我们举例的一对一的案例Person-Idcard。如果我们只查询person那么会不会查询Idcard呢? 

 

public class Person {  

    private int id;  

    private String name;  

    private IdCard idcard; 

}  
 

 

毕竟Idcard也是Person类的一个属性。如上面的代码: 

如果我们查询一个person我们只是用到了这个person的name属性。而用不到它关联的idcard部分。那么我们就可以在配置文件中设置lazy=”true”的一个选项。如下面的代码: 

 

<hibernate-mapping   

    package="cn.hibernate.model">  

    <class name="Person" table="person">  

      <id name="id">  

          <generator class="native" /> 

        </id>  

        <property name="name" column="name"/>  

        <!-- 一对一的对象关系描述 -->  

        <one-to-one name="idcard" lazy="false"/>  

    </class> 

</hibernate-mapping>
 

 

当懒加载开启的时候那么我们查询person对象不会去查询相应的Idcard。只有在我们用person对象的get方法调用idcard对象的时候才会执行查询。这样就提高了效率。  

   

举例sql说明: 

下面的这些代码只是查询Emp员工对象。   

 

   s = HibernateUtil.getSession();  

   Employee emp = (Employee) s.get(Employee.class, 2);  
 

 

懒加载开启: 

只输出一句sql: 

select employee0_.id as id2_0_, employee0_.empname as empname2_0_, employee0_.dept_id as dept3_2_0_ from employee employee0_ where employee0_.id=? 
 

 

懒加载未开启: 

输出两句查询sql: 

Hibernate: select employee0_.id as id2_0_, employee0_.empname as empname2_0_, employee0_.dept_id as dept3_2_0_ from employee employee0_ where employee0_.id=?  
Hibernate: select dept0_.id as id1_0_, dept0_.deptname as deptname1_0_ from dept dept0_ where dept0_.id=? 
 

注意:  懒 加载的对象是代理对象,getId是不用访问数据库的。另外getClass得到的也是一个代理对象。只有get其他属性的时候才会访问数据库。 Session的load方法可以懒加载。然后用Hibernate.initialize(proxyObj)load方法实例化该代理对象。    懒加载通过asm和cglib包实现。 

分享到:
评论

相关推荐

    hibernate懒加载策略.doc

    综上所述,Hibernate的懒加载策略是通过代理对象和回调机制实现的,旨在按需加载数据,减少不必要的数据库操作,提高系统效率。合理使用懒加载,可以显著优化数据访问性能,但同时也需要考虑其可能带来的问题和挑战...

    集成spring的hibernate懒加载

    在Java的Web开发中,Spring框架与Hibernate的整合是常见的数据访问层实现方式。Spring提供了强大的依赖注入(DI)和AOP(面向切面编程...以上就是关于"集成spring的hibernate懒加载"问题的详细解析,希望对你有所帮助。

    hibernate抓取策略和懒加载案例

    懒加载是一种延迟加载机制,它使得关联对象在初始加载时不被加载,直到它们被实际访问时。例如,如果我们有一个`User`类,它有一个`List&lt;Address&gt;`,默认情况下,`Address`会在第一次访问时才加载。这通过代理对象...

    Hibernate延时加载与lazy机制.doc

    Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...

    Hibernate lazy加载FOR Connection

    标签“源码”表明这个话题可能涉及到Hibernate框架的内部实现,包括其源代码分析,这可能涉及到了解Hibernate是如何实现懒加载机制的。而“工具”可能指的是Hibernate作为一种用于Java开发的关系型数据库管理工具。 ...

    Hibernate lazy延迟加载

    **标题**: Hibernate懒加载(Lazy Loading) 在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会...

    Hibernate 延迟加载

    #### 懒加载机制 懒加载,即延迟加载,是Hibernate为解决负载问题而设计的一种策略。其核心在于推迟与数据库的交互,直到真正需要数据时才进行查询。这不仅降低了数据库的压力,还提高了应用程序的运行效率。 ####...

    懒加载异常解决.docx

    2. **配置不当:** 没有正确配置Hibernate或其他ORM框架来支持懒加载,或者相关的过滤器和拦截器设置不正确。 3. **多线程环境下的问题:** 在多线程环境中,如果对象被多个线程共享,并且在一个线程中关闭了Session...

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    hibernate延迟加载解决

    - **Hibernate的`initialize()`方法**:在Session关闭前,可以显式调用Hibernate提供的`initialize()`方法初始化懒加载属性。 **6. 注意事项** - 延迟加载并不适用于所有场景,需要根据实际需求和性能考虑来选择...

    hibernate延迟加载技术详细解

    - 例如,假设有一个用户实体 User 和一个权限集合 Permissions,当尝试访问 User 对象中的 Permissions 集合时,如果 Permissions 尚未加载,则会触发懒加载机制。 ```java User user = session.createQuery(...

    Hibernate加载方式与多态加载分析

    除了`load`方法默认不支持多态加载(因为其懒加载机制),其他的加载方式如`get`、HQL和Criteria均在一定程度上支持多态加载。但请注意,启用多态查询的关键在于数据库表结构与映射文件的一致性。只有当父类和子类在...

    Hibernate之数据加载方式

    1. **懒加载(Lazy Loading)**:默认情况下,Hibernate采用懒加载策略,即关联的对象不会在初始化时加载,而是在首次访问该关联对象时才加载。这种方式能有效减少内存消耗和提高性能。 2. **立即加载(Eager ...

    理解Hibernate中PO的代理类

    在Hibernate中,理解代理类的工作原理和配置懒加载机制对于优化数据访问性能至关重要。通过配置文件或注解的方式,开发者可以精确控制哪些实体类或属性使用懒加载,从而在提升性能的同时,减少程序的复杂度。在实际...

    gilead hibernate lazyload例子

    这就是Hibernate懒加载(Lazy Load)机制的作用所在。懒加载是一种延迟加载策略,只在真正需要时才加载关联的数据,以减少内存消耗和提高响应速度。 Gilead,全称为Hibernate for Flex,是用于Flex和Hibernate之间...

    【北大青鸟内部教程】jsp中关于Hibernate延时加载的问题

    2. **懒加载失效**:在JSP页面上直接访问延时加载的属性可能导致懒加载失效,因为JSP执行在Web容器的上下文中,而这个上下文可能在Session关闭后。为解决此问题,可以在Controller层或Service层提前加载关联数据,...

    Hibernate延迟加载

    延迟加载的实现依赖于CGLIB库,它会动态生成代理对象,使得在访问懒加载属性时能够无缝地触发数据库查询。 延迟加载可以通过以下几种方式配置: 1. 类级延迟加载:在映射文件中,`lazy="true"`或`lazy="false"`...

    Flex 与 Hibernate 的延迟加载问题

    在开发Flex与Hibernate集成的应用时,延迟加载(Lazy Loading)是一个常见的挑战,因为Flex客户端无法直接理解和处理Hibernate的延迟加载机制。延迟加载是一种优化策略,它允许关联的对象在真正需要时才被加载,而...

    hibernate的lazy策略forClass

    由于Java的反射机制和代理模式,Hibernate在某些情况下会遇到所谓的“初始化外键”问题,即在未初始化懒加载属性时,试图访问该属性,导致`LazyInitializationException`。这个问题通常发生在Session关闭之后,因为...

    hibernate一键休眠,SDK程式源码

    《Hibernate SDK源码解析与应用》 ...一键休眠的实现,实际上是Hibernate懒加载机制的体现,是提高程序效率的有效策略。对于Java开发者来说,深入理解并熟练运用Hibernate,能够极大地提升开发效率和项目质量。

Global site tag (gtag.js) - Google Analytics