【问题标题】:First level cache in HibernateHibernate 中的一级缓存
【发布时间】:2013-12-14 08:50:07
【问题描述】:

我是 Hibernate 的新手,正在阅读有关 Hibernate 一级缓存的信息。 我有个疑问。 Will every session that is associated with the SessionFactory have an individual cache or for all the sessions there will be only one cache? 谁能解释一下。

【问题讨论】:

    标签: hibernate session caching


    【解决方案1】:

    一级缓存与Session对象相关联。正如我们所知,会话对象是从会话工厂按需创建的,一旦会话关闭,它就会丢失。类似地,与会话对象关联的第一级缓存仅在会话对象处于活动状态时才可用。它仅对会话对象可用,并且对应用程序的任何其他部分中的任何其他会话对象都不可访问。

    一些要点

    1. 一级缓存与“会话”对象相关联,应用程序中的其他会话对象看不到它。

    2. 缓存对象的范围是会话。会话关闭后, 缓存的对象永远消失了。

    3. 一级缓存默认开启,不能关闭。

    4. 当我们第一次查询实体时,它会从数据库中检索并存储在与休眠会话关联的一级缓存中。

    5. 如果我们用同一个会话对象再次查询同一个对象,它将从缓存中加载,不会执行任何sql查询。

    6. 可以使用 evict() 方法从会话中删除加载的实体。如果该实体已使用 evict() 方法删除,则该实体的下一次加载将再次进行数据库调用。

    7. 可以使用 clear() 方法删除整个会话缓存。它将删除存储在缓存中的所有实体。

    引用自:http://howtodoinjava.com/2013/07/01/understanding-hibernate-first-level-cache-with-example/

    【讨论】:

    • 我们可以在不关闭第一个会话的情况下将第二个会话关联到 SessionFactory 吗?第一个会话和第二个会话会有不同的缓存吗?
    • 是的,我们可以在不关闭现有会话的情况下打开新会话,并且两个会话将具有不同的缓存。
    • 不要忘记在 clear()/evict(...) 之前刷新()会话,否则您新保存的实体会消失。
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2015-02-05
    • 2015-05-14
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多