The 默认缓存配置对于实体被命名entity
:
对于存储在其中的每种数据类型,缓存配置可能有所不同
缓存。为了覆盖缓存配置模板,请使用
财产hibernate.cache.infinispan.data-type.cfg
where data-type
可以是以下之一:
entity
实体索引@Id
or @EmbeddedId
属性。
immutable-entity
带有标签的实体@Immutable
注释或设置
作为mutable=false
在映射文件中。
naturalid
按其索引的实体@NaturalId
属性。
collection
所有收藏。
timestamps
映射实体类型 → 最后修改时间戳。用过的
用于查询缓存。
query
映射查询→查询结果。
pending-puts
使用失效模式的区域的辅助缓存
缓存。
默认为collection
, immutable-entity
and naturalid
也是指定的配置entity
,因此您不必单独配置它们(当然,如果您不想单独配置),如中所示文档和源代码.
Note
一般来说,使 Hibernate L2 缓存分布式可能不是一个好主意,因为实体实例存储在分解水合状态在 L2 缓存中,这意味着只有关联实体的 ID 与父实体状态存储在一起。
假设您有以下实体(A
, B
, C
都是可缓存的):
@Entity
public class A {
@ManyToOne
private B b;
@OneToMany
private Collection<C> cs;
}
即使cs
集合也可以缓存,以完全组装一个实体A
从缓存中的实例,您将有以下到集群其他节点的网络往返:
- 获取实体
A
state.
- 获取实体
B
状态基于存储在b
协会。
- 获取集合
cs
ids.
- 对于中的每个 id
cs
集合,获取C
实体状态,一一对应。
显然,如果你正在组装A
实例(例如,来自查询结果),以上所有内容都会针对每个实例执行A
.
这一切都意味着直接从数据库读取数据(通过正确配置的延迟加载,使用批量大小例如),可能比分布式缓存中的所有网络往返更有效。
此外,这也是实体/集合缓存应在失效集群模式下运行的原因之一(数据仅缓存在读/写数据的节点上,但在更改时在其他节点上失效)。