gpt4 book ai didi

database - JPA 缓存与数据库的并发访问保持同步

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:45 25 4
gpt4 key购买 nike

基于 JPA 实现其持久性的服务层可以从由 JPA 提供程序(例如 Hibernate、Toplink/Toplink Essentials 等)透明管理的二级缓存中获益匪浅。当这个缓存被激活时,它会在第一次从数据库中加载持久类的实例时保存它们。可能有特定于供应商的扩展来配置缓存行为。

JPA 标准还通过具有时间戳或版本字段来支持乐观锁定,该字段用于在发生并发更新时避免数据损坏。由于此机制依赖于数据库中包含的数据,因此它也可以在其他应用程序或服务想要更新数据时使用 - 只需在更新中包含记录的版本字段即可。

当谈到缓存时,行为似乎是JPA 提供者(至少是Toplink Essentials)没有注意到数据库中的变化 不是使用 EntityManager 执行的。

这真的是默认行为吗?更新/使 JPA 提供程序缓存失效的责任取决于应用程序吗?如果是,这似乎与大多数数据库被许多不同应用程序使用的事实完全相反。

最佳答案

此行为对于 Hibernate ( 19.2. The Second Level Cache ) 也是如此:

Be aware that caches are not aware of changes made to the persistent store by another application. They can, however, be configured to regularly expire cached data.

这听起来很合理。如果这个应用程序不使用缓存,您的缓存应该如何知道另一个应用程序所做的任何更改?留给缓存/JPA 提供者的唯一可能性是监视数据库(所有表、所有数据)的更改并相应地更新。这真的不可行。

我还读到,由于上述原因,当多个应用程序更改数据库中的相同数据时,强烈建议不要使用二级缓存。

关于database - JPA 缓存与数据库的并发访问保持同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1543125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com