首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >hibernate二级缓存理解

hibernate二级缓存理解
EN

Stack Overflow用户
提问于 2014-02-16 18:00:07
回答 1查看 122关注 0票数 0

刚刚开始学习hibernate,并了解hibernate二级缓存。我创建了一个评论实体,并尝试对其进行处理。这是我的代码!

代码语言:javascript
运行
复制
 @Entity
 @Table(name = "comment")
 @FilterDefs(value={@FilterDef(name="projectFilter",parameters=@ParamDef(name="projectID", type="java.lang.Long" )),   @FilterDef(name="issueFilter", parameters=@ParamDef( name="issueID", type="java.lang.Long" ) )})
 @Filters(value={@Filter(name = "projectFilter", condition = "project_id = :projectID"), 
    @Filter(name = "issueFilter", condition = "issue_id = :issueID")})
  @Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="comment")
  public class Comment {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, precision = 5, scale = 0 )
private long id;
@Column(name = "project_id", nullable = false)
private long projectId;
@Column(name = "issue_id", nullable = false)
private long issueId;
@Column(name = "author_id", nullable = false)
private long auhorId;
@Column(name = "author_name", nullable = false)
private String authorName;
@Column(name = "comment")
private String comment;
@Column(name = "created_date")
private Date createdDate;

我想获取基于项目或项目和问题的用户评论。在DAO中,我编写了以下基于projectid的注释函数。

代码语言:javascript
运行
复制
   @Autowired
   private SessionFactory sessionFactory;
  ...
  @Override
  public List<Comment> getAllProjectComments(long projectId) {  
    Session session = getCurrentSession();
    Filter filter = session.enableFilter("projectFilter");
    filter.setParameter("projectID", projectId);
    return session.createQuery("from Comment").setCacheable(true).list();

}

下面是ehcahe.xml

代码语言:javascript
运行
复制
    <?xml  version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">
    <diskStore path="java.io.tmpdir/hibernate-cache"/>

    <defaultCache maxElementsInMemory="500"
            eternal="false"
            timeToIdleSeconds="1200"
            timeToLiveSeconds="2400"
            overflowToDisk="false"
            maxElementsOnDisk="1000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="1200"
            memoryStoreEvictionPolicy="LRU"/>

    <cache  name="org.trackMyProject.entity.Comment"
   maxElementsInMemory="50"
   maxElementsOnDisk="500"
   eternal="false"
       timeToIdleSeconds="30"
       timeToLiveSeconds="120"
       overflowToDisk="true"
    />

我已经在表格中为2个项目添加了500条评论。

当控制器调用DAO方法来获得基于项目id的注释,并随后调用该项目id时,二级缓存似乎可以很好地工作,并且DB没有命中。但是,如果我经常在两个projectID之间切换,那么每次数据库命中时,我都不想要。

谁能告诉我我犯了什么错误,或者需要做更多的配置。

提前感谢!!

编辑!

代码语言:javascript
运行
复制
                classpath:hibernate.cfg.xml     
代码语言:javascript
运行
复制
<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">${jdbc.dialect}</prop>
        <prop key="hibernate.show_sql">true</prop>
        <!-- <prop key="hibernate.cache.use_query_cache">true</prop> -->
        <prop key="hibernate.connection.release_mode">after_transaction</prop>
        <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop>
        <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="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
    </props>
</property>
</bean>
EN

回答 1

Stack Overflow用户

发布于 2014-02-16 18:04:56

您使用的是createQuery,这意味着您需要查询级缓存,请尝试添加以下内容:

代码语言:javascript
运行
复制
<property name='hibernate.cache.use_query_cache'>true</property>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21809738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档