【发布时间】:2014-03-16 15:16:52
【问题描述】:
我已经读过实体内的集合可以通过@Cache 注释或其在休眠中的 xml 等效项显式缓存在二级缓存中。现在,如果我有一个很大的 txn,其中将多次访问 @ManyToMany 类型的集合,是否可以指示休眠将连接查询结果缓存在其一级缓存中,以便每次在第一次之后访问该集合时,hibernate 在其会话缓存中查找而不是触发查询?
设置 FlushMode AUTO 会影响一级缓存访问的效率吗?
【问题讨论】:
我已经读过实体内的集合可以通过@Cache 注释或其在休眠中的 xml 等效项显式缓存在二级缓存中。现在,如果我有一个很大的 txn,其中将多次访问 @ManyToMany 类型的集合,是否可以指示休眠将连接查询结果缓存在其一级缓存中,以便每次在第一次之后访问该集合时,hibernate 在其会话缓存中查找而不是触发查询?
设置 FlushMode AUTO 会影响一级缓存访问的效率吗?
【问题讨论】:
如果@ManyToMany 集合被访问一次,结果将在会话期间保存在一级缓存中。
如果保持相同的休眠会话执行多个任务不切实际,那么@Cache 和二级缓存更方便。
FlushMode.AUTO 表示 Hibernate 将决定何时刷新会话,这意味着生成查询并将其发送到数据库(但尚未提交)。
这有效地将数据库与内存中的对象同步,因此进一步的查询将已经看到到目前为止通过会话完成的修改。此功能对访问一级缓存的效率没有任何直接影响。
【讨论】: