2

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

4

1 回答 1

0

实际上,如果您不小心,它确实会产生内存问题。
但是您之前会遇到另一个限制:性能......

Hibernate 在事务中加载的所有内容都存储在上下文中。每次尝试加载对象时,它都会首先检查上下文是否不存在。将大量实体存储在上下文中会对性能造成巨大影响(出于复杂的原因,我不会在此详述)。

如果 Hibernate 不这样做,它将返回同一实体的许多实例,并带有重复的数据。如果您更新它们,它将无法知道哪些数据要保存到数据库。

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


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

于 2017-04-01T04:52:43.320 回答