首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate第一级缓存以保存由非ID属性找到的实体

Hibernate第一级缓存以保存由非ID属性找到的实体
EN

Stack Overflow用户
提问于 2019-10-05 11:46:29
回答 1查看 192关注 0票数 1

我正在开发一个Java8/ Spring 2应用程序,我注意到我的应用程序的安全模块内部使用了我的findByEmail方法的UserRepostiory (这是一个标准的)。当我启用Hibernate SQL日志时,我发现这些查询在同一个会话中多次执行(安全性使用它3-4次,然后我的业务代码使用它更多次)。每次查询命中数据库时。这让我感到惊讶,因为我期望它被缓存在Hibernate的第一级缓存中。在阅读了更多关于它的内容之后,我发现第一级缓存只缓存findById查询的结果,而不是其他缓存。

我是否可以在第一级缓存中缓存findByEmail查询的结果?(我不希望在会话之间共享缓存,我不想使用第二级缓存,因为我认为它应该在当前会话结束后失效)。

EN

回答 1

Stack Overflow用户

发布于 2022-11-22 14:20:22

是的,如果用@NaturalId注释对属性进行注释,则可以将查询结果缓存在唯一属性上。如果然后使用专用API执行查询,则结果将存储在第一级缓存中。举个例子:

代码语言:javascript
复制
User user = entityManager
    .unwrap(Session.class)
    .bySimpleNaturalId(User.class)
    .load("john@example.com");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58247986

复制
相关文章

相似问题

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