`

理解Hibernate中PO的代理类

阅读更多

理解一下Hibernate中动态类与load()和get()方法区别

 

Load

Customer customer=(Customer)session.load(Customer.class,new Long(1));

当我们执行session的load()方法时,hibernate不会去查询数据库,它相信数据库中已经存在此条数据,会先到session缓存中查找此ID的对象或者代理类,如果未找到则创建一个代理对象,它仅仅返回是代理类的实例,这个代理类有以下特征:

1)由Hibernate在运行时动态生成,它扩展了返回customer,因此它了继承了customer的的所有属性和方法,它的实现对于应用程序是透明的。

2)Hibernate创建customer代理实例类时,仅仅初始化了它的ID属性,其它属性都为NULL,它占用内存很少。

3)当应用程序第一次访问Customer代理实例时,如customer.getName(),Hibernate会初始化代理实例类,在初始化过

程中会执行select语句查询数据库,真正从数据库取得该对象。但getID()除外,因为创建代理时ID值已经存在。

 

load在使用时如果发现数据库中未存在此条数据会抛出ObjectNotFoundException。

 

Hibernate采用CGLIB工具来生成持久化类的代理类,CGLIB是一个功能强大的Java字节码生成工具,它能在java程序运行期间动态生成扩展java类或者实现Java接口的代理类。

 

get

使用get方法,hibernate先确认这些记录是否存在,会先在session缓存中查找是否有load()使用过的代理实例,或者其它对象延迟加载的此对象,则返回的是此用过代理类,而不是对象实例。如果未发现去二级缓存或者数据库查找此对象,返回的依然是代理,只不过是包含实体数据。

 

get在使用时未找到对象则会返回NULL

 

分享到:
评论

相关推荐

    Hibernate中所有包作用详细讲解

    2. **cglib-asm.jar**: CGLIB是一个强大的代码生成库,Hibernate使用它来动态生成持久化对象(PO)的代理类,以实现方法拦截和懒加载等功能,也是必不可少的。 3. **dom4j.jar**: 提供了XML处理的API,Hibernate...

    Hibernate中各个包的作用

    CGLIB是一个代码生成库,Hibernate利用它来动态生成持久化对象(PO)的字节码,实现了对无接口类的透明代理,是Hibernate的重要组成部分。 3. **dom4j.jar**: 这是一个强大的XML处理库,用于读写XML文件。...

    2022年Hibernate包作用详解Java教程.docx

    这是Hibernate实现透明持久化的一个关键部分,允许在运行时创建和修改类,无需手动编写代理类。 `dom4j.jar`是XML处理库,用于读写XML文件。Hibernate依赖它解析和生成配置文件,如hibernate.cfg.xml,使得配置文件...

    hibernateJAR包

    在Hibernate中,cglib.jar主要用于生成代理类,以支持懒加载等特性。 ### versioncheck.jar – 版本检查需求 尽管在提供的部分文件描述中未提及versioncheck.jar的具体用途,但根据其名称推测,该JAR包可能用于...

    hibernate2开发包详解

    - **作用**:Hibernate利用CGLIB来实现PO(Plain Old Java Object,普通老式Java对象)字节码的动态生成,用于生成代理类或实现对象状态的持久化。 - **重要性**:对于实现Hibernate的持久化逻辑至关重要,必须使用...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

    例如,在`UsersDAOImp`类中,通过`getHibernateTemplate()`方法获取`HibernateTemplate`实例,并利用该实例执行保存、删除、查找等操作。 #### 五、案例分析 以`UsersDAOImp`类为例,可以看到Spring如何简化了...

    ssh事务处理

    本文将围绕“SSH事务处理”这一主题展开深入探讨,旨在帮助读者理解如何在Struts+Spring+Hibernate(简称SSH)框架中进行有效的事务管理。 #### 一、事务处理的基本概念 事务(Transaction)是指一系列操作作为一个...

    使用SSH构建Web应用系统

    7. **延迟加载**:理解并正确使用Hibernate的延迟加载机制,可以优化性能,避免不必要的数据获取。 **应用专题** 1. **LOB字段处理**:SSH提供了处理大对象(LOB)字段的方法,如BLOB和CLOB,确保大数据类型的存储...

    SSH整合需要的JAR包详细介绍

    - **cglib-2.1.3.jar**:CGLIB库,用于生成PO(Plain Old Java Object)类的字节码,使得Hibernate能够实现动态代理。 - **asm.jar** 和 **asm-attrs.jar**:ASM字节码库,与CGLIB配合,处理Java字节码生成。 - *...

    客户关系管理系统框架搭建(二)

    --3 配置本地化代理工程bean,这是spring整合hibernate的入口 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--表示在类路径下加载...

    SSH+EXT如何返回JSON

    首先,在项目的`struts.xml`文件中定义一个名为`locationlist`的动作,该动作对应于`locationAction`类中的`locationlist`方法。当这个动作被调用时,它会返回`JsonData.jsp`页面作为响应结果,如果出现错误,则返回...

    Spring.3.x企业应用开发实战(完整版).part2

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

    Spring3.x企业应用开发实战(完整版) part1

    12.2 在Spring中使用Hibernate 12.2.1 配置SessionFactory 12.2.2 使用HibernateTemplate 12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务...

    Java学习笔记-个人整理的

    {2.8}框架中移动的小球}{59}{section.2.8} {2.9}抽象与接口}{59}{section.2.9} {2.10}访问控制}{60}{section.2.10} {2.10.1}类的属性}{60}{subsection.2.10.1} {2.10.2}类的方法}{61}{subsection.2.10.2} {...

    monitor源码java-JInsight::hot_beverage:开源Java代理透明地检测和监视JavaWeb应用程序

    开源Java代理透明地收集有关应用程序中各种子系统的指标。 JInsight当前收集有关以下模块/框架的度量: JVM指标[✓]堆,[✓] GC,[✓]线程,[✓]类加载,[✓]线程 Web服务器指标[✓] Tomcat 8.x,[✓] Jetty 9.X ...

Global site tag (gtag.js) - Google Analytics