Hibernate 冬眠';s的二级缓存?

Hibernate 冬眠';s的二级缓存?,hibernate,caching,Hibernate,Caching,我了解到Ehcache可以用作Hibernate的二级缓存 但是,一级缓存是什么?它有什么用?第一级缓存是否与第二级缓存通信?有人能准确地解释在两级系统中缓存数据时会发生什么情况吗 谢谢。Hibernate的一级缓存位于您的Hibernate会话中。它的寿命很短,一级缓存的数量与Hibernate会话的数量相同。通常,web应用程序中每个用户请求一个会话 第一级缓存包含会话中使用的所有对象,以及尚未持久化到底层数据库的脏对象。刷新会话后,第一级缓存中的所有脏对象将通过第二级缓存传播,并保存到数据

我了解到Ehcache可以用作Hibernate的二级缓存

但是,一级缓存是什么?它有什么用?第一级缓存是否与第二级缓存通信?有人能准确地解释在两级系统中缓存数据时会发生什么情况吗


谢谢。

Hibernate的一级缓存位于您的Hibernate会话中。它的寿命很短,一级缓存的数量与Hibernate会话的数量相同。通常,web应用程序中每个用户请求一个会话

第一级缓存包含会话中使用的所有对象,以及尚未持久化到底层数据库的脏对象。刷新会话后,第一级缓存中的所有脏对象将通过第二级缓存传播,并保存到数据库中

只有一个二级缓存,用作会话中DB和所有一级缓存之间的缓存。因此,当有人从数据库加载对象时,它将保存在二级缓存中。这样,当其他人加载相同的对象时,它将不会来自数据库,而是来自二级缓存。对象保留在二级缓存中,直到不再需要它们为止,具体取决于缓存逐出策略


当有人更改对象并将其刷新到数据库时,该对象也会在第二个缓存中更改。用户的一级缓存中已经有相同的对象,如果试图更改并刷新该对象,则会出现异常。

最后一部分是错误的。第二级缓存不执行任何版本检查。因此,如果为该实体启用了乐观锁定,它们将得到一个异常,如果没有乐观锁定,最后一个状态将写入二级缓存和数据库。