Hibernate/Ehcache: выселение наборов от 2-го кэша уровня, не синхронизируемого с другими чтениями DB

автоматический ключевое слово для типа переменной, заключающего

8
задан 1 October 2009 в 19:22
поделиться

3 ответа

Почему вы не можете поддерживать коллекции в актуальном состоянии? т.е. когда вы добавляете объект, добавьте объект в коллекцию, которой он принадлежит. Когда вы удаляете объект, удаляйте его из коллекции, в которой он находится. По моему опыту, при использовании кеша с hibernate или jpa состояние объекта (а не состояние базы данных) кэшируется, поэтому вам нужно убедиться, что ваша объектная модель в памяти синхронизируется с объектной моделью в базе данных.

Или мне что-то не хватает? Почему вы просто не можете постоянно обновлять коллекции?

0
ответ дан 6 December 2019 в 00:57
поделиться

По сути, вам нужно принудительно выполнить чтение из базы данных в случае, если коллекция находится в процессе или только что была исключена. Один из способов сделать это - пометить коллекцию как грязную, как только будет получен запрос на ее удаление, но до входа в транзакцию для ее изменения. Любая параллельная транзакция, которая приходит вместе, будет проверять грязный флаг, и если для него установлено значение true, она должна получить данные из базы данных, иначе она сможет читать из кеша. Возможно, вам придется изменить настройки транзакции БД, чтобы параллельные транзакции блокировались до тех пор, пока не завершится обновление данных, чтобы правильные данные считывались из БД. После завершения транзакции вы можете сбросить флаг грязных данных на false.

Вы также можете создать блокировку кэшированной коллекции при обновлении, вставка или удаление подлежат сроку до тех пор, пока длится выселение. Это гарантирует, что никакая другая транзакция не сможет прочитать / изменить кэшированную коллекцию до завершения процесса удаления.

3
ответ дан 6 December 2019 в 00:57
поделиться

Я думаю, вы должны сослаться на эту ссылку: - Гибернация: очистка кеша 2 уровня коллекции при каскадном удалении элементов видите, спящий режим на самом деле не удаляет объект из кеша .. остальное вы можете получить ответ по ссылке выше

0
ответ дан 6 December 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: