Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate二级缓存不适用于GORM 6.1.11 问题:_Hibernate_Caching_Grails_Gorm_Hibernate Cache - Fatal编程技术网

Hibernate二级缓存不适用于GORM 6.1.11 问题:

Hibernate二级缓存不适用于GORM 6.1.11 问题:,hibernate,caching,grails,gorm,hibernate-cache,Hibernate,Caching,Grails,Gorm,Hibernate Cache,我有一个条件查询,其中Hibernate的二级缓存用于使用缓存(true): 当此代码被命中两次时,第一次执行预期的数据库查询,但下一次执行相同的代码时,它不应该命中数据库进行查询,而是应该从缓存中获取查询。但事实并非如此 日志: 环境: 操作系统:MacOS,CentOS7 GORM版本:6.1.11 Grails版本(如果使用Grails):3.3.9 JDK版本:1.8.0\u 91 复制步骤: 克隆这个git克隆git@github.com:wizpanda/test-l2-cach

我有一个条件查询,其中Hibernate的二级缓存用于使用
缓存(true)

当此代码被命中两次时,第一次执行预期的数据库查询,但下一次执行相同的代码时,它不应该命中数据库进行查询,而是应该从缓存中获取查询。但事实并非如此

日志: 环境:
  • 操作系统:MacOS,CentOS7
  • GORM版本:6.1.11
  • Grails版本(如果使用Grails):3.3.9
  • JDK版本:1.8.0\u 91
复制步骤:
  • 克隆这个
    git克隆git@github.com:wizpanda/test-l2-cache.git
  • 登录MySQL数据库并创建新数据库
    create database test\u l2\u cache
  • grails-app/conf/application.yml
  • 运行应用程序
    grailsrunapp
    /gradlew bootRun
  • 浏览至
    http://localhost:8080/
    并检查日志

  • 引发的问题:

    作为第一步,您需要启用Hibernate的二级缓存,如下所示:

    hibernate.cache.use_second_level_cache=true
    
    这样,您只为实体而不是查询启用了二级缓存

    如果需要在查询/条件级别进行缓存:

    在HibernateAPI中:
    query.setCacheable(true)//查询是org.hibernate.query的实例


    在JPA中:
    query.setHint(“org.hibernate.cacheable”,true)//query是javax.persistence.query的实例

    作为第一步,您需要启用hibernate的二级缓存,如下所示:

    hibernate.cache.use_second_level_cache=true
    
    这样,您只为实体而不是查询启用了二级缓存

    如果需要在查询/条件级别进行缓存:

    在HibernateAPI中:
    query.setCacheable(true)//查询是org.hibernate.query的实例


    在JPA中:
    query.setHint(“org.hibernate.cacheable”,true)//query是Grails中javax.persistence.query的实例

    ,query cache通过编写
    cache(true)
    来工作,这相当于hibernate中hibernate中的
    query.setCacheable(true)
    ,在启用任何查询的缓存之前,需要启用二级缓存。在Grails中,查询缓存通过写入
    cache(true)
    来工作,这相当于在Hibernate中的Hibernate中的
    query.setCacheable(true)
    ,但是,在启用任何查询的缓存之前,需要启用二级缓存。
    hibernate.cache.use_second_level_cache=true