文档章节

Fetch与Cache

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 587
阅读 4
收藏 0
点赞 0
评论 0

通过测试我发现,通过Fetch得去的对象是不会放入二级缓存的!(但它极有可能被放入查询缓存!这一点明天研究一下。)凡是Fetch的对象都会通过生成SQL从数据库重建。这一点和 http://blog.csdn.net/bluishglc/archive/2010/05/16/5597043.aspx 中所提到的情况暗合!为什么说“暗合”呢?目前来看,我们可以认为:在Hibernate中Fetch出来的对象似乎总是“二等公民”,它们只被它们的宿主对象所知,从全局的角度(Session)是看不到这些对象的。(是这样的么?明天做一下测试。搞明白session和session的缓存一回事么?)这就是为什么这些被Fetch的对象明明已经加载到了内存中,但是在二级缓存中却找不它们。反面的印证就是从宿主对象导航到Fetch出来的从属对象时并不会导致SQL产生,但如果从属对象不是通过Fetch加载的,即使它们之前已被加载出来,在导航到这些对象时还是生成SQL的。(此时正是使用二级缓存的好时机,如果使用的话,就不会生成SQL了!)这就是Fetch和二级缓存之间微妙的关系。

 

记住非常重要的一点:

通过load,get和对象间导航得到的对象都是二级缓存的目标!通过查询得到的对象是不会进行二级缓存的,而是进入查询缓存!


做一个测试:先通过HQL查询一个对象。然后使用load得到这个对象,在使用二级缓存的情况下,看一看是什么结果!

 

查询中产生的对象会进入Session上下文。此时如果通过session来load这些对象会直接命中,不会生成SQL。

但是查询本身不会试图从上下文中查找对象。而是必定生成SQL。

 

例子:

        //The hql is: from Thread
        threadRepository.loadAll();
        logger.debug("ALL");
        threadRepository.load(1L);
        logger.debug("1 L");
        threadRepository.load(2L);
        logger.debug("2 L");

结果:

DEBUG - SQLStatementLogger.logStatement(111) |
    /* criteria query */ select
        this_.id as id5_0_,
        this_.creationTime as creation2_5_0_,
        this_.forumId as forumId5_0_,
        this_.modifiedTime as modified3_5_0_,
        this_1_.subjectId as subjectId6_0_
    from
        Thread this_
    left outer join
        Thread_Subject this_1_
            on this_.id=this_1_.threadId
DEBUG - ForumTest.testGetForumById(37) | ALL
DEBUG - ForumTest.testGetForumById(39) | 1 L
DEBUG - ForumTest.testGetForumById(41) | 2 L

 

 

 


本文转载自:http://blog.csdn.net/bluishglc/article/details/5659202

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
5、Approximate timing for various operations on a typical PC

execute typical instruction 1/1,000,000,000 sec = 1 nanosec fetch from L1 cache memory 0.5 nanosec branch misprediction 5 nanosec fetch from L2 cache memory 7 nanosec Mutex lock......

hopegrace ⋅ 2012/03/29 ⋅ 0

PHP缓存的简单实现

闲着没事发个PHP缓存实现,实现了apc和文件缓存,继承Cache_Abstract即可实现调用第三方的缓存工具。 参考shindig的缓存类和apc。 <?php class CacheException extends Exception {} / 缓存抽...

墙头草 ⋅ 2012/01/13 ⋅ 0

discuz 首页四格图不显示的解决方法

低版本升级导致,preforumthreadimage 表格为空 代码有bug,按如下修改代码: ~~~.phpdiff --git a/source/module/forum/forumindex.php b/source/module/forum/forumindex.phpindex 3bc08e5......

扣丁禅师 ⋅ 2016/05/31 ⋅ 0

典型 PC 系统各种操作指令的大概时间

典型 PC 系统各种操作指令的大概时间 参考: http://news.cnblogs.com/n/155744/

hopegrace ⋅ 2012/09/02 ⋅ 0

执行apt-get upgrade遇到的错误

Failed to fetch http://172.16.19.246/ubuntuprecise163/pool/main/g/gcc-4.4/libstdc++64.4.3-4ubuntu5.1i386.deb rename failed, Input/output error (/var/cache/apt/archives/partial/l......

yandong ⋅ 2013/01/15 ⋅ 2

elasticsearch aggregation 缓存

在工作中遇到一个问题,按照6个维度进行聚合,响应校验,平均需要300ms。看了相关资料后,采用以下方式解决: 启用数据压缩 transport.tcp.compress: true 2. 使用缓存 curl -XPUT 'localhos...

whk66668888 ⋅ 2017/07/14 ⋅ 0

hibernate笔记

检索策略 区分类级别和关联级别检索 1)类级别检索:直接加载目标对象本身----Customer c = session.get(Customer.class,1); 2)关联级别检索:通过检索到的对象导航到关联的对象---Customer...

simpler ⋅ 2014/03/14 ⋅ 0

Cache Fetched AJAX Requests Locally: Wrapping the Fetch API

This article is by guest author Peter Bengtsson. SitePoint guest posts aim to bring you engaging content from prominent writers and speakers of the JavaScript community More fro......

-鹏 ⋅ 2016/08/26 ⋅ 0

ShopNC 的 wkchace 函数

该行数用来处理缓存,默认下通过 redis 来处理缓存,在 readis 未启动情况下则通过 file 方式来处理缓存。file 所在位置是 。 KV缓存 写 @param string $key 缓存名称 @param mixed $value ...

林玮晶 ⋅ 2015/09/28 ⋅ 0

Oracle 10046事件 介绍(二) ---tkprof

之前简单的写了10046事件介绍的文章http://hbxztc.blog.51cto.com/1587495/1898624,当然收集10046 trace不是最终的目的,能够读懂并且通过分析10046 trace进而分析相应sql的性能问题才是100...

技术小胖子 ⋅ 2017/11/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 59分钟前 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

阿里云云栖社区 ⋅ 今天 ⋅ 0

zabbix短信报警统计以及报表展示

一、需求 由于我们的业务报警比较频繁,之前是针对每个报警进行具体处理,但是有时还会重复出现,或者后续处理有时忘记跟进等,因此进行报警短信的统计,可以针对一些问题与业务跟进,明确后...

o翡翠谷o ⋅ 今天 ⋅ 0

JNI 输出LOG

1、导入log头文件。在你使用的 .c/ .cpp 文件中,导入 log.h 头文件。 #include<android/log.h> 2、在android.mk 加上 LOCAL_LDLIBS := -llog 或 LOCAL_SHARED_LIBRARIES := liblog 3、定义L......

国仔饼 ⋅ 今天 ⋅ 0

主线程pthread_exit 作用

#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;#define NUM_THREADS 10void* say_hello(void* args){ int i = *((int*)args);/......

xxdd ⋅ 今天 ⋅ 0

崛起于Springboot2.X之Mybatis-xml方式操作mysql数据库(3)

序言:当第一篇讲道Mybatis的时候,只要使用过mybatis的java程序员100%都会知道这种方式,因为这是最广泛最全面的编写sql操作mysql数据库的方式,高级sql的编写往往通过xml方式,接下来进入正...

木九天 ⋅ 今天 ⋅ 1

移动弹窗基础知识浅析——IOS弹窗体系

摘要: 最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基...

猫耳m ⋅ 今天 ⋅ 0

spring elasticsearch 2.4 date 日期

1.mappingPUT user_behavior { "mappings": { "user_behavior": { "properties": { "date": { "type": "createDate", ......

xiaomin0322 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部