休眠中的一级缓存在会话对象上维持并且在同一个JVM的边界内。这是hibernate使用的强制性缓存。我担心如何在集群环境中管理它。多个节点将拥有自己的第一级缓存(等于会话数)。在单个JVM中,一个实体可以是不同会话的一部分,但是事务管理器,乐观锁定处理情况....但是,我们如何在集群环境中管理它?集群环境中的休眠一级缓存
1)实体可以在两个不同节点的一级缓存导致陈旧的数据问题,数据丢失问题。
2)如果我们使用乐观锁定....将很难恢复事务,并且还会影响其他节点上的其他有用事务。
3)我们不能对每一笔交易采取悲观的锁定。它会杀死休眠缓存的有用性。
4)隔离级别的设置也不起作用,因为事务管理是由hibernate应用程序本身完成的,并且事务管理的边界是一个JVM。
可能是你没有得到错误,但如果节点不同,它不是一个无错误的安排。事务管理由hibernate应用程序本身完成。它不使用数据库事务管理(除非悲观锁定)。隔离级别的边界是单个JVM。 – user3082820
我不同意。在休眠之下,你真正拥有的是数据库事务,并且这两个应用程序实例都攻击同一个数据库。如果app [node1]打开事务并刷新(不提交),app [node2]将读取未被取消的数据,除非使用READ_COMMITED隔离级别。 – codependent
Hibernate不使用DB锁进行事务管理。检查hibernate事务API。很少数据库不支持所有类型的隔离级别。如果在Hibernate中设置READ_COMMITED隔离级别,那么它不是数据库的隔离级别。 Hibernate通过悲观锁定来获取数据库隔离。 – user3082820