Hibernate中什么情况下两个实例各自维持自己的缓存?

刚学Hibernate,个人很菜。
数据共享的前提下,在同一个应用程序中,运用Hibernate在什么情况下 两个实例 各自维持自己的缓存?请讲详细点(由于个人很菜)谢谢。

事实上,hibernate 是自己维护缓存的,是一种全局的维护,不需要用户干预。默认情况下,hibernate只有一级缓存,由实体管理器来管理。

如果为了提高hibernate 的性能,通常会启用二级缓存。二级缓存只需要在配置文件配置一下,hibernate 就可以使用二级缓存了。具体配置方法,google 一下,到处都是。

还有,你既然初学 hibernate ,现在最好先不要关心这些问题,否则,分心了,可能学起来更吃力,也容易失去信心。踏踏实实学好基础的用法才是最关键的。

一般说来,除非是你独立开发项目,否则很多东西,如这种缓存的配置,都可以由系统配置人员去做,根本不需要你过多的关心。

你的问题本身描述就不清楚,什么叫“两个实例各自维持自己的缓存?”。不明白你说的意思,能否详细的说明一下问题?

你说的实例是什么?是实体吗?

在hibernate中,所有实体都是由实体管理器统一管理的。比如,有实体类:User,那么所有的实体对象,即所有通过实体管理器查出来的 user,都是由实体管理器自动管理。当 user 对象的个数超过缓存设定的最大实体个数时,实体管理器就会根据缓存策略来决定哪些实体丢弃掉,常见的如,最长时间没有访问的对象先丢弃,再把新的实体放进来。

如果一套系统是分布式的,而且使用了分布式的缓存的话,同样,实体管理器和缓存管理器会根据设定的策略对分布在不同机器上的数据进行同步。基本上不需要你操心的

既然你不使用分布式缓存,那就干脆不用二级缓存,这样,基本上每次更新数据时,系统都会从数据库中读到最新的数据后,才更新。这样出错的几率小一些。

如果使用分布式缓存的话,你可以考虑一下 ehcahe,现在 ehcache 支持分布式缓存。但没使用过,不清楚具体情况如何。