JPA не может работать только с постоянным контекстом (кеш L1) или явным кешем (кэш L2).Его всегда нужно комбинировать с источником данных, и этот источник данных обычно указывает на базу данных, которая сохраняется в стабильном хранилище.
Таким образом, сущность находится в памяти только до тех пор, пока транзакция (которая требуется для JPA сохраняетсяоперации) не совершено.После этого он отправляется источнику данных.
Если менеджер транзакций находится в области транзакции («нормальный» случай), то кэш L1 (контекст постоянства) закрывается и сущности там больше не существуют.Если кэш L1 как-то вас беспокоит, вы можете немного с этим справиться.Есть операции, чтобы очистить его, и вы можете отделить ваши операции чтения (которые не требуют транзакций) от операций записи.Если при чтении транзакция не активна, контекст постоянства отсутствует, сущность никогда не присоединяется и, следовательно, никогда не помещается в этот кэш L1.
Однако кэш L2 не очищается, когда транзакция фиксируется, и сущности внутри нее остаютсядоступно для всего приложения.Этот кэш L2 должен быть явно настроен, и вы, как разработчик приложения, должны указать, какие объекты должны быть в нем кэшированы.С помощью механизмов, специфичных для разных поставщиков (например, JBoss Cache, Infinispan), вы можете установить максимальное количество кэшируемых сущностей и установить / определить так называемые политики удаления.
Конечно, ничто не мешает вам дать точку источника данныхв встроенную БД в памяти, но это вне знания JPA.