【问题标题】:How NHibernate keeps track of DETACHED Object?NHibernate 如何跟踪 DETACHED 对象?
【发布时间】:2013-11-11 07:56:09
【问题描述】:

我们可以使用 Update() 将 Detached 对象的状态遍历到 Persistent 状态 或 SaveorUpdate() 等。这意味着 nHibernate 以某种方式跟踪 Detached 对象。我最初认为它可能会将分离的对象保存在内存中。但是当我遇到这个声明时,我感到很困惑:

您可以在处理完每个对象后立即 Evict() (在遍历查询结果时),从而防止内存 筋疲力尽。 Ref: NHibernate in Action

前提是:Evict() 用于从 Persistent 遍历到 Detached 对象。

在上面的语句中:“从而防止内存耗尽。”给出了一个概念,好像 分离的对象不在内存中维护。那还有什么地方呢?

【问题讨论】:

  • 是指内存的“一级缓存”吗?

标签: nhibernate


【解决方案1】:

是的,Evict 将实体从一级缓存中移除。

“已分离”仅表示该对象与会话无关。它不在任何会话的一级缓存中。

SaveOrUpdate 将对象添加到一级缓存并安排在下一个Flush 上插入或更新。

【讨论】:

  • 那么 NHibernate 如何跟踪 Detached 对象(因为它不在一级缓存中)我还遇到了另一条语句:持久实例以反汇编形式存储在二级缓存中。虽然我认为它们存储在一级缓存中。我哪里错了?
猜你喜欢
  • 2015-01-27
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多