Сервисный уровень, который реализует свою устойчивость на основе JPA, может извлечь огромную выгоду из кэша второго уровня, который прозрачно управляется провайдером JPA (например, Hibernate, Toplink / Toplink Essentials и т. Д.). Когда этот кеш активирован, он содержит экземпляры постоянных классов, как только они были загружены из базы данных в первый раз. Для настройки поведения кэша могут быть специфичные для поставщика расширения.
Стандарт JPA также поддерживает оптимистическую блокировку благодаря наличию отметки времени или поля версии, которое используется для предотвращения повреждения данных при одновременном обновлении. Поскольку этот механизм основан на данных, содержащихся в базе данных, его также можно использовать, когда другие приложения или службы хотят обновить данные - просто включите поле версии записи в обновление, и все готово.
Когда дело доходит до кэширования , поведение выглядит следующим образом: поставщик JPA (по крайней мере, Toplink Essentials) не замечает изменений в базе данных , которые не выполняются с помощью EntityManager.
Действительно ли это поведение по умолчанию, и ответственность за обновление / аннулирование кэша JPA-провайдера лежит на приложении? Если да, то это кажется довольно противоречивым, поскольку большинство баз данных используется многими различными приложениями.