【发布时间】:2018-05-22 15:56:03
【问题描述】:
我最近将我的 java 应用程序从 hibernate 4.1 升级到了 hibernate 5.2,我注意到(通过查看 SQL 跟踪)二级实体缓存使用情况有所不同。缓存的使用频率不如以前的版本。
为了简单起见,假设我有一个非常基本的模型:一个与其 PARENT 具有多对一关系的 CHILD 实体。 PARENT 类使用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 进行注释。 CHILD 中的多对一关系用@Fetch(FetchMode.SELECT) 注释。这应该让二级缓存有机会在获取 CHILD 时存储 PARENT。
当我加载单个 CHILD 实例(使用类似 from CHILD where id=:id 的查询)时,我看到使用了 PARENT 缓存。如果我再次执行查询,则不会对数据库重复 PARENT 辅助选择。
但是,当我一次加载多个 CHILD(使用 from CHILD 之类的查询)时,不使用 PARENT 缓存。如果我再次执行查询,则会重复第二个 PARENT 选择。
这是表演的一大损失。有没有人遇到过同样的问题?我错过了一些配置部分吗?
感谢您的帮助。
【问题讨论】: