Hibernate 二级缓存不缓存已提交的实体
我想知道 Hibernate 二级缓存(我们使用 EHCache)是否可以允许应用程序缓存已提交到数据库的实体(如果它知道没有其他应用程序正在修改数据库)。
我的想法是,如果我更新记录 A,那么我就知道记录 A 的值,并且应该能够缓存该值,像 Terracotta 这样的 JVM 集群系统使用 Java 同步锁在 JVM 堆内存方面支持这种类型的行为。
I'm wondering if it's possible for Hibernate second level cache (we're using EHCache) to allow an application to cache an Entity that has been comitted to the DB if it knows that no other applications are modifying the DB.
My thought is that if I update record A, then I know the value of record A and should be able to cache that, JVM clustering systems like Terracotta support this type of behavior in terms of JVM heap memory using Java synchronization locks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最先进的 POJO 的《in Action》一书谈到了这一点
和...
并根据 JPA with Hibernate book Transactional 选择以下策略之一
如果需要,事务隔离高达可重复读取。使用此策略
主要读取对于防止并发事务中的过时数据至关重要的数据,
在罕见的更新情况下。
机制,并且仅在非集群环境中可用。同样,对于以读取为主的数据,请使用此策略,这对于防止并发事务中的过时数据(在罕见的更新情况下)至关重要。
添加到原始答案:无论您使用 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),Hibernate 都不保证缓存和数据库之间的一致性。如果您想使用它,那么您应该配置足够短的到期超时,这可能会影响性能。
问候,
State of the art POJO's in Action book talks about it
And...
And choose one of the following strategies according to JPA with Hibernate book
transactional isolation up to repeatable read, if required. Use this strategy for
read-mostly data where it’s critical to prevent stale data in concurrent transactions,
in the rare case of an update.
mechanism and is available only in nonclustered environments. Again, use this strategy for read-mostly data where it’s critical to prevent stale data in concurrent transactions, in the rare case of an update.
Added to original anwser: Hibernate DOES NOT GUARANTEE consistency between the cache and the database whether you use @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE). If you want to use it, so you SHOULD configure a sufficiently short expiry timeout which can affect perfomance.
regards,