Session.list()方法是否在hibernate中使用会话缓存?

时间:2017-04-01 04:46:45

标签: hibernate-cache

Hibernate是否缓存了来自Session.list()的结果? 我相信session.get()或session.load()方法会将结果缓存到内存中,但是session.list()并不会因为它生成大量可能导致内存问题的记录但是在get和加载它只会生成单个对象。

1 个答案:

答案 0 :(得分:0)

实际上,如果你不小心,确实会产生记忆问题 但是你之前会遇到另一个限制:表现......

Hibernate在事务中加载的所有内容都存储在上下文中。每次尝试加载对象时,如果它尚未存在,则首先检查上下文。在上下文中存储了大量实体是一个巨大的性能损失(出于复杂的原因,我在这里不详细说明。)

如果Hibernate没有这样做,它将返回同一实体的许多实例,并重复数据。如果您更新它们,它将无法知道哪些数据会持久存储到数据库中。

经验法则如果您不再需要它们,请尽快缩短您的交易,或evict()实体中的实体。

PS:它不叫"缓存" ;会话是正确执行其ORM任务所必需的上下文。有二级缓存库,但它完全不同。

相关问题