我对缓存很新,想问一个简单的问题:
想象一下,我有以下类实体:
@Entity
public class Player {
@OneToOne
private Secret secret;
}
现在,我们假设我正在缓存两个人(秘密和玩家)。 现在,让我说我这样做:
player.getSecret().setValue("no secrets"); // lets say this secret id == 2
playerRepository.save(player);
第二级缓存是否足够智能驱逐名为“Secret”的缓存,其中一个条目的id == 2?
二级缓存是否存在某些我应该注意的限制?它是否可以插入而不更改我的网络应用程序是什么或永远?
答案 0 :(得分:0)
在这种情况下运行良好,如果您使用正确的缓存并发策略,它将确定对象何时自动失效。
关于陷阱的问题,在设置缓存时需要注意以下事项,这在您第一次看到它们时可能会令人惊讶:
默认情况下,只缓存由Id加载的实体,如果要缓存查询结果,则还需要添加查询缓存。
如果要将一个或多个缓存到集合中,则需要单独注释关联,因为默认情况下不会缓存关联
请参阅此博客文章,详细了解这两个缓存:Truly Understanding the Second-Level and Query Caches