问题标签 [hibernate-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 查询缓存区域是否需要与实体缓存区域相同
在我的项目中,我为某些实体启用了休眠查询缓存(使用 ehcache)和二级实体缓存。在文档中还提到,查询缓存不存储完整的实体对象,只存储实体标识。所以我们也应该启用二级实体缓存以获得更好的性能。
我想知道查询缓存区域和实体缓存区域是否应该相同?或者它们是否可以不同并且如果它是缓存在查询缓存中的查询结果,仍然会从二级缓存返回实体?我的另一个问题是,是否可以根据业务分类为不同的实体配置不同的二级缓存区域?
spring-data-jpa - 在 Spring Data JPA Repository 上调用 count() 方法时的 JPA 缓存行为
我正在为 Spring Data JPA 存储库编写一个基于事务性 junit 的 IT 测试。要检查表中的行数,我使用侧 JDBCTemplate。
我注意到,在事务上下文中调用 oforg.springframework.data.repository.CrudRepository#save(S)
不会生效。未执行 SQL 插入,表中的行数未增加。
但是,如果我在执行 SQL 插入并增加行数org.springframework.data.repository.CrudRepository#count
之后调用。save(S)
我猜这是 JPA 缓存的行为,但它是如何工作的呢?
使用 Spring Boot 的代码:
实体:
存储库:
grails - Grails 只返回实体的 id
我有一个实体产品和实体内部,我有 Contry 实体。
当我执行 Product.find 或 Product.get 并获取国家/地区值时,我的国家/地区值只有 id 值,但在国家实体中,我有 id、名称和代码 [id: 1, code:null, name:null],但这情况是间歇性的,99% 的时间值被加载 [id:1, code: XXX, name:YYYYY]。
我认为这是一个缓存问题,但我不在开发人员环境中模拟,只是在生产环境中
我的国家域名:
这是一个 grails/hibernate 缓存错误?我如何模拟这种情况?
maven - EhCache 2.10.x 很重
使用 Maven,我将我们的 Hibernate 版本更新为 5.x,现在它可以与 EhCache 2.10.x 传递。这个版本非常重(大约 10 Mb)。这在小型应用程序中很烦人。JAR 包含许多来自 J2EE 的 .class 文件,例如javax.servlet
. 是否有一个苗条的 EhCache 2.10.x 版本的 JAR?或者我该如何解决这个问题?
hibernate - 休眠缓存不适用于一对一关系的反面
我尝试用谷歌搜索,发现问题可能重复,但我无法预览它:https ://stackoverflow.com/questions/49344593/inverse-side-one-to-one-relationship-caching-not-working
给定两个域模型类:
和
我可以在日志中看到休眠不使用缓存来检索ObjectB#objectA
字段。
我通过实验发现最后一个实体加载实际上是查询加载关系的反面。
java - 当缓存已满时,在将新实体添加到缓存之前,休眠会从缓存中逐出哪个现有实体?
我正在休眠项目中设置EHCache。如果缓存满了怎么办?假设所有实体在缓存中都是有效的,并且 hibernate 想要将新实体添加到其中。那么哪个实体将被休眠将这个新实体添加到缓存中?或者有什么机制可以通过代码来处理这种情况?
java - 在出现 redis 连接问题的情况下,Hibernate 中的断路器 L2 缓存
我正在使用 redisson-hibernate 作为 Hibernate 2 级缓存提供程序。如果 redis 服务器变得不可用,当应用程序运行时,整个应用程序就会宕机。我正试图找到一种在这种情况下断开 L2 缓存的方法。
如果 redis 不可用,hibernate 应该像 L2 被禁用一样工作,并且应该有一些机制(或后续请求),应该在指定数量的 L2 之后检查 redis 可用性,并重新启用 L2。有没有办法做到这一点?
如果没有,我该如何建立这样的机制?我可以尝试运行一个石英作业,它检查 redis 连接,通过修改应用程序配置来终止并重新启动应用程序。但是这种方法很复杂,而且不是很干净。请建议。
hibernate - 休眠二级缓存不适用于 GORM 6.1.11
问题:
我有一个条件查询,其中使用了 Hibernate 的二级缓存cache(true)
:
当此代码被命中两次时,第一次它会进行预期的数据库查询,但是当下次执行相同的代码时,它不应该命中数据库以进行查询,而是应该从缓存中获取它。但这并没有发生。
日志:
环境:
- 操作系统:MacOS、CentOS7
- GORM 版本: 6.1.11
- Grails 版本(如果使用 Grails): 3.3.9
- JDK版本: 1.8.0_91
重现步骤:
- 克隆这个repo
git clone git@github.com:wizpanda/test-l2-cache.git
- 登录 MySQL 数据库并创建一个新数据库
create database test_l2_cache
- 更改 MySQL 用户名和密码
grails-app/conf/application.yml
- 运行应用程序
grails run-app
或./gradlew bootRun
- 浏览
http://localhost:8080/
并检查日志
提出的问题:https ://github.com/grails/grails-data-mapping/issues/1266
java - 如何在spring boot的application.property文件中引用位于spring boot maven JAR文件中的类文件
我有一个 Spring Boot Camel 项目,它使用 Hibernate 并启用了它的 L2 缓存系统。我使用的 L2 缓存提供程序是 Redis,应用程序通过 Spring Redission starter 连接。
我通过maven(基本上是一个FAT jar)打包应用程序,并且要求我必须独立运行应用程序。我已将与应用程序相关的所有属性文件(包括 application.properties 文件)放在配置文件夹中。
我希望从胖 jar 中取出所有属性文件的原因是我希望属性的值是可配置的,而不是我必须经常构建一个 jar 文件来进行较小的配置更改。
我通过 Eclipse 通过 maven 项目的运行配置中的 maven 安装选项使用 maven 的maven-jar-plugin构建 jar 。
我也试过评论上面的插件,只是使用资源标签/坐标来排除 .jar 文件中不需要的文件。
独立应用程序服务器布局如下所示:
项目布局1
项目布局2
由于应用程序还涉及访问 Redis 服务器以获取休眠 L2 缓存,因此application.properties文件中提到的休眠相关属性条目很少。L2 Cache 配置片段如下:
我会使用自定义 RedissionConfigFactory 在应用程序启动期间启动 redis 连接管理器。代码如下所示:
当我使用 Eclipse 时,该应用程序启动并正常工作。但是当我通过 maven 打包应用程序后尝试将应用程序作为独立应用程序启动时,应用程序无法加载自定义 RedisConfigFactory 类文件,因为该文件现在位于 .jar 文件中,我觉得 hibernate 是找不到属性 spring.jpa.properties.cache.region.factory_class=com.redis.RedissionConfig中提到的类文件
我留下了一个例外,如下所述:
我还尝试了通过替换spring.jpa.properties.cache.region.factory_class=com.redis.RedissionConfig来注入类文件的其他方法
如下所示:
- (如果类可能已经被spring注入到休眠类加载器)
- spring.jpa.properties.cache.region.factory_class=#redissionConfig以及
- spring.jpa.properties.cache.region.factory_class=${redissionConfig}
但是,它仍然没有用。我面临与上述相同的异常。
任何人都可以帮我解决如何从spring boot的application.properties文件中加载/引用位于.jar文件中的类文件,该文件位于其实际包结构之外。
任何帮助都将不胜感激,因为我被困在这里不知道如何解决这个问题。
hibernate - 使用spring boot 2 hibernate 5通过示例结果缓存查询
我有一个包含很多列(几乎 70)和行(140 万)的表。然而,数据很少更新。我想缓存表实体以加快查询速度。查询可以是一个或多个列上的任何过滤器组合(Spring 数据存储库中提供的示例查询)。
带有查询缓存的 L2 缓存是否适合这种情况?(L2缓存适用于主键加载,Query缓存适用于Query加载举例)