`
kuangtoby
  • 浏览: 2849 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Hiberante3 一,二级缓存总结【转】

阅读更多
Hiberante3 一级缓存总结

1.             Session 级别的缓存,它同session邦定。它的生命周期和session相同。Session消毁,它也同时消毁;管理一级缓存,一级缓存无法取消,用两个方法管理,clear(),evict()

2.             两个session 不能共享一级缓存,因它会伴随session的生命周期的创建和消毁;

3.             Session缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果

使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!

4 .  iterate 查询使用缓存,会发出查询Id的SQL和HQL语句,但不会发出查实体的,

它查询完会把相应的实体放到缓存里边,一些实体查询如果缓存里边有,就从缓存中查询,但还是会发出查询id的SQL和HQL语句。如果缓存中没有它会数据库中查询,然后将查询到的实体一个一个放到缓存中去,所以会有N+1问题出现。

5 . List()和iterate 查询区别:

使用iterate,list查询实体对象*N+1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题

所谓的N+1是在查询的时候发出了N+1条sql语句1:首先发出一条查询对象id列表的sqlN:

根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句list和iterate的区别?

list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据

iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题

6.Get()和load(),iterate方法都会使用一级缓存,



7.hiberate3 session 存储过程如下:

       例如 object 对象

       Session.save(object);

       这时候不会把数据放到数据库,会先放到session缓存中去,数据库中没有相应记录,session.flush();才发SQL和HQL语句,数据库中有了相应记录,

       但是数据库用select查不到,这是跟数据库事物级别有关系,(这里在说下数据库的事务隔离级别一共四种如下:)
    数据库隔离级别:
        隔离级别                       是否存在脏读  是否存在不可重复读     是否存在幻读;
    Read UnCommited(未提交读)               Y            Y                     Y
    Read Commited (提交读 oraclel默认)      N            Y                     Y
    Repeatable Read(不可重复读(Msql默认))  N            N                     Y
    Serializable(使用很少)                  N            N                     N
   


       Session.beginTrransaction().commit();

       事物提交后可以查询到了。

Session.flush()语句但是为什么不写呢,因为commit()会默认调用flush();

Hiberante3 二级缓存总结

1.Hibernate3的(sessionFactory)二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存;

2.sessionFactory级别的缓存,需要手动配置;所有的session可以共享sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到sessionFactory级别的缓存中,适合放不经常变化的实体对象。)

3.Hiberante3二级缓存的配置和使用方法如下:

1. 必须把ehcache.jar包导入,然后到Hibernate3.2的etc文件下把ehcache.xml复制到工程src目录下(ehcache.xml里边的参数里边有详细英文说明);

(说明:ehcache.jar是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache支持分布应用的(这个和Hibernate3.2开发手册有出入,经过官网查证确实支持了),如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);

4.Hibernate3的二级缓存默认是开起的,也可以指定开起。在hibernate.cfg.xml 文件下配置如下:

*修改hibernate.cfg.xml文件,开户二级缓存;

                     <property name=”hibernate.cache.use_second_level_cache”>true</property>

                     *指定二级缓存产品的提供商;

<property name=”hibernate.cache.provider_class”> org.hibernate.cache.EhCacheProvider

</property>

要让那些实体使用二级缓存,在hibernate.cfg.xml配置文件中加入:

<!—

让这个实体用二级缓存 也可以在实体中映射文件去配置即:

<cache usage="read-only"/>

-->

<class-cache class=”com.zzz.hibernate.ClassT” usage=”read-only”/>

Read-only一般使用这个策略,其它的hibernate3开发手册中也有详细介绍;

CacheMode去hibernate3开发手册中搜索这个关键字,可以找到一级缓存和二级缓存交互使用的问题;
分享到:
评论

相关推荐

    Hiberante3相关文档

    “Hibernate3_缓存机制”意味着这部分内容将深入探讨Hibernate如何通过缓存提高性能,包括第一级缓存和第二级缓存的概念,以及它们的工作原理。 “Hibernate3_数据加载”则可能涵盖Hibernate的数据检索策略,如懒...

    hiberante 源码 配置资料

    4. 缓存配置:Hibernate提供了一级缓存和二级缓存,一级缓存是Session级别的,而二级缓存可以通过第三方插件如Ehcache进行配置,提高数据访问性能。 5. SessionFactory初始化:通过`Configuration`类加载配置信息并...

    hiberante4.2.3-part01

    5. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,能提高性能,减少对数据库的访问。二级缓存则可以通过插件如Ehcache实现,可以跨会话共享...

    Hiberante lib

    通过实践,可以深入理解Hibernate如何将Java对象与数据库记录关联,以及如何优化性能,如使用二级缓存和批处理等技术。 总的来说,“Hiberante lib”压缩包提供了搭建和学习Hibernate环境的基础组件,对于想要进入...

    hiberante中文帮助文档

    8. **缓存机制**:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),能够提高数据访问速度并减少数据库压力。 9. **关联映射**: Hibernate支持一对一、一对多、多对一和多对多...

    hiberante5基础讲义

    二级缓存则是SessionFactory级别的,可跨会话共享,通常需要配合第三方缓存实现,如Ehcache。Hibernate还支持查询缓存,将已执行过的查询结果缓存起来,避免重复执行相同的SQL。 六、其他特性 除了上述内容,...

    疯狂Ajax讲义5+Spring+hiberante

    5. **缓存机制**:Hibernate支持二级缓存,可以提高数据读取效率,减少对数据库的访问。 综上所述,这个压缩包中的内容可能涵盖了Web开发中Ajax的使用,Spring框架的配置与应用,以及如何利用Hibernate进行数据库...

    hiberante 学习PDF

    Hibernate 提供了两级缓存:一级缓存(session 缓存)和二级缓存(全局缓存)。合理使用缓存可以显著提高应用程序的性能。 #### 映射策略 - **一对一、一对多、多对一和多对多**:Hibernate 支持各种复杂的关系...

    疯狂Ajax讲义+Spring+hiberante

    4. **缓存机制**:Hibernate支持一级缓存(Session缓存)和二级缓存(可选),以提高数据访问性能。 5. **事务管理**:Hibernate整合了JTA(Java Transaction API)和JPA(Java Persistence API)的事务处理,确保...

    Hiberante读取BLOB数据类型.

    - 缓存策略:根据业务需求,选择合适的缓存策略,比如第二级缓存,以减少对数据库的访问。 - 分批读取和写入:如果数据量非常大,可以考虑分批读取和写入,避免一次性处理所有数据。 5. **事务管理** 操作BLOB...

    hiberante annotations reference_cn

    Hibernate提供了二级缓存机制,可以提高数据读取效率。此外,还有懒加载(Lazy Loading)、批处理(Batch Processing)、缓存策略等优化手段,以降低数据库访问压力。 8. **其他高级特性** Hibernate还支持实体的...

    hiberante ref document

    Hibernate提供了缓存策略,包括第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),以及查询缓存。合理利用缓存可以显著提升应用性能。 八、事务管理 Hibernate支持JTA和JDBC事务管理,...

    hiberante基础介绍

    尽管 Hibernate 在未优化的情况下可能性能不佳,但通过使用缓存策略(如一级缓存、二级缓存)和查询优化,可以显著提升其性能。 **入门 Hibernate** 要开始使用 Hibernate,首先需要下载 Hibernate 的开发包,如 ...

    hiberante 参考手册 最新版 中文版 3.6.8

    - **二级缓存与查询缓存**: 优化性能的关键技术。 - **查询语言中的替换**: 替换查询语言中的变量。 - **Hibernate的统计机制**: 收集和显示有关Hibernate操作的统计数据。 - **3.5 日志**: 配置日志级别和输出...

    hibernate-release-5.1.16.Final.zip

    Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,可以减少数据库访问;二级缓存则需要配合第三方缓存框架如Ehcache,可进一步提高性能。 七、事务管理 ...

    hiberante3.2源码

    在 Hibernate 3.2 中,一级缓存(Session 缓存)默认开启,而二级缓存可以通过插件实现,如 Ehcache,它可以跨多个 Session 工作,提高数据读取速度。 6. **事件和监听器**:Hibernate 提供了事件驱动的机制,允许...

    hiberante in action

    7. **缓存机制**:Hibernate支持二级缓存和查询缓存,可以提高数据访问速度,减少数据库负载。理解何时和如何使用缓存可以显著提升系统性能。 8. **事务管理**:Hibernate支持JTA和JDBC两种事务管理方式,理解事务...

    hibernate3.3.1框架必要jar包整合

    8. **缓存机制**:Hibernate支持二级缓存,可以显著提升应用性能。一级缓存是Session级别的,保存了最近访问的对象;二级缓存是SessionFactory级别的,可以跨Session共享数据。 9. **事务管理**:Hibernate支持自动...

    Struts+Hiberante论坛系统,提供完整包

    - **缓存机制**:Hibernate支持一级缓存(Session级别)和二级缓存(SessionFactory级别),能有效提升性能。 3. **论坛系统架构**: - **用户模块**:包括用户注册、登录、个人信息管理等功能,通常会涉及User...

    hibernate3.2生命周期

    Session缓存分为一级缓存和二级缓存。一级缓存是每个Session内部的,对象一旦持久化就会被添加进去。二级缓存是可选的,可以跨多个Session共享,但需要配置和管理。 ### 6. 源码分析 深入源码可以帮助我们理解...

Global site tag (gtag.js) - Google Analytics