二级hibernate缓存理解

时间:2009-12-01 10:04:33

标签: java hibernate caching

** 1. **对于二级缓存,只能设置超时时间而不能强制刷新/清除实体缓存?或putthing注释@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)如每次执行saveorupdate / mergeupdate时自动刷新/清除缓存?什么是hibernateTemplate.flush()与此相关?


2。为所有实体启用二级缓存是否合适?如果我不想要缓存所有实体的缓存时间过长,那么你们在这种情况下使用ehcache的平均超时是多少?

1 个答案:

答案 0 :(得分:1)

1)如果必须,您可以手动从二级缓存中逐出实体。 SessionFactory为此目的有几种方法;有些人驱逐一个实体(或集合)的单个实例;其他人驱逐给定类的所有实体(或给定的实体名称/角色名称)。

那就是说,通常不应该这样做 - Hibernate会为你更新缓存(除非你正在做一些像SQL更新这样的特定东西 - 在这种情况下要澄清一下你的问题)。

2)一般情况下 - 不,缓存所有实体并不好。缓存不可变实体以及经常加载/很少更新的实体通常是个好主意;假设你没有吨数。但同样,这实际上取决于你正在做什么。

如果您愿意,超时是一个拐杖(或者是一种保护措施),即使您不这样做,也可以保持您的缓存大小/状态合理。好的缓存策略不应该依赖它。