【发布时间】:2009-10-09 10:58:35
【问题描述】:
基于 JPA 实现其持久性的服务层可以从由 JPA 提供者(例如 Hibernate、Toplink/Toplink Essentials 等)透明管理的二级缓存中获得巨大收益。当这个缓存被激活时,一旦它们第一次从数据库中加载,它就会保存持久类的实例。可能有供应商特定的扩展来配置缓存行为。
JPA 标准还通过具有时间戳或版本字段来支持乐观锁定,用于避免发生并发更新时的数据损坏。由于这种机制依赖于数据库中包含的数据,因此它也可以在其他应用程序或服务想要更新数据时使用 - 只需在更新中包含记录的版本字段即可。
当涉及到缓存时,行为似乎是JPA 提供者(至少是Toplink Essentials)没有注意到数据库中的变化 不使用 EntityManager 执行。
这真的是默认行为吗?更新/无效 JPA 提供程序缓存的责任取决于应用程序吗?如果是的话,这似乎与大多数数据库被许多不同的应用程序使用的事实相悖。
【问题讨论】:
标签: database jpa caching concurrency