b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

休眠查询缓存和辅助缓存的详细信息

电脑杂谈  发布时间:2020-04-01 01:08:12  来源:网络整理

hibernate 注解 主键_hibernate二级缓存注解_springmvc hibernate 注解关系

三月,你不能跳吗? >>>

本文介绍了hibernate的查询缓存二级缓存,如何配置它们以及它们如何工作.

摘要

休眠二级缓存是用于存储实体数据的应用程序级缓存,而查询缓存是用于仅存储查询结果的单独缓存. 这两个缓存通常一起工作. 毕竟,我们很少看到仅使用一种缓存的情况. Hibernate Cahce通过减少对的SQL访问次数来提高程序性能.

二级缓存的工作方式

辅助缓存存储实体数据,而不存储实体本身. 数据以类似于HashMap的键值格式存储. 键是实体的ID,值是原始值的集合. 内容如下:

hibernate二级缓存注解_hibernate 注解 主键_springmvc hibernate 注解关系

*-----------------------------------------*
|          Person Data Cache              |
|-----------------------------------------|
| 1 -> [ "John" , "Q" , "Public" , null ] |
| 2 -> [ "Joey" , "D" , "Public" ,  1   ] |
| 3 -> [ "Sara" , "N" , "Public" ,  1   ] |
*-----------------------------------------*

通过id从获取对象时,或者遍历了延迟加载映射关系时,获取的对象将被填充到辅助缓存中.

查询缓存的工作方式

查询缓存也是类似于HashMap的结构. 键由查询语句和参数组成. 该值是与查询语句匹配的实体ID的集合:

*----------------------------------------------------------*
|                       Query Cache                        |                     
|----------------------------------------------------------|
| ["from Person where firstName=?", ["Joey"] ] -> [1, 2] ] |
*----------------------------------------------------------*

某些查询不返回实体,而是返回原始值. 在这种情况下hibernate二级缓存注解,原始值存储在查询缓存中. 执行可缓存的JPQL / HQL查询时,查询结果可以存储在查询缓存中.

springmvc hibernate 注解关系_hibernate 注解 主键_hibernate二级缓存注解

查询缓存和二级缓存之间的关系

如果在执行查询之前存在缓存的结果集,则SQL语句将不再访问,而是直接从查询缓存中获取查询结果,然后在结果中使用实体标识符(ID)设置为访问二级缓存. 如果二级缓存包含具有指定ID的数据,则返回与该数据相对应的实体. 否则,将查询以获得该实体.

如何在程序中使用缓存

首先导入hibernate-ehcache.jar

然后将以下属性添加到SessionFactory配置文件中

<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="net.sf.ehcache.configurationResourceName">ehcache-ext.xml</prop>

hibernate二级缓存注解_hibernate 注解 主键_springmvc hibernate 注解关系

使用EhCacheRegionFactory而不是SingletonEhCacheRegionFactory,然后Hibernate将为其创建一个单独的缓存区域,而不是重用程序中其他地方已经存在的缓存区域.

下一步添加缓存配置文件

<?xml version="1.0" ?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             updateCheck="false"
       xsi:noNamespaceSchemaLocation="ehcache.xsd" name="yourCacheManager">
     <diskStore path="java.io.tmpdir"/>
     <cache name="yourEntityCache"
            maxEntriesLocalHeap="10000"
            eternal="false"
            overflowToDisk="false"
            timeToLiveSeconds="86400" />
     <cache name="org.hibernate.cache.internal.StandardQueryCache"
            maxElementsInMemory="10000"
            eternal="false
            timeToLiveSeconds="86400"
            overflowToDisk="false"
            memoryStoreEvictionPolicy="LRU" />
  <defaultCache
          maxElementsInMemory="10000"
          eternal="false"
          timeToLiveSeconds="86400"
          overflowToDisk="false"
          memoryStoreEvictionPolicy="LRU" /></ehcache>

如果未指定,则使用默认缓存hibernate二级缓存注解,但请尝试避免使用默认配置. 最后,确保每个ehcache元素都有一个name属性. 这样可以防止他使用默认名称来避免与其他配置冲突.

使用辅助缓存

为了使缓存正常工作,必须首先将注释添加到实体类:

hibernate 注解 主键_springmvc hibernate 注解关系_hibernate二级缓存注解

@Entity       
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY, 
     region="yourEntityCache")
public class SomeEntity {
    ...
}

辅助缓存还可以缓存关联的实体,但是您还必须评论关联的实体:

@Entity       
public class SomeEntity {
    @OneToMany
    @Cache(usage=CacheConcurrencyStrategy.READ_ONLY,
        region="yourCollectionRegion")
     private Set<OtherEntity> other;     
}

使用查询缓存

配置查询缓存后,默认情况下无法缓存查询,并且必须使用缓存显式标记查询. 以下查询被标记为已缓存

@NamedQuery(name="account.queryName",
   query="select acct from Account ...",
   hints={
       @QueryHint(name="org.hibernate.cacheable",
       value="true")
   }     
})

将条件查询标记为缓存:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159467-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 许小伟
        许小伟

        应该是他儿子去和人

      热点图片
      拼命载入中...