我正在开发一个Java8/ Spring 2应用程序,我注意到我的应用程序的安全模块内部使用了我的findByEmail方法的UserRepostiory (这是一个标准的)。当我启用Hibernate SQL日志时,我发现这些查询在同一个会话中多次执行(安全性使用它3-4次,然后我的业务代码使用它更多次)。每次查询命中数据库时。这让我感到惊讶,因为我期望它被缓存在Hibernate的第一级缓存中。在阅读了更多关于它的内容之后,我发现第一级缓存只缓存findById查询的结果,而不是其他缓存。
我是否可以在第一级缓存中缓存findByEmail查询的结果?(我不希望在会话之间共享缓存,我不想使用第二级缓存,因为我认为它应该在当前会话结束后失效)。
发布于 2022-11-22 14:20:22
是的,如果用@NaturalId注释对属性进行注释,则可以将查询结果缓存在唯一属性上。如果然后使用专用API执行查询,则结果将存储在第一级缓存中。举个例子:
User user = entityManager
.unwrap(Session.class)
.bySimpleNaturalId(User.class)
.load("john@example.com");https://stackoverflow.com/questions/58247986
复制相似问题