Будьте в спящем режиме: Уберите 2-й кэш уровня набора в то время как объекты каскадного удаления

Мое персональное предпочтение должно осуществить основную проверку на слое базы данных и затем использовать методы самоанализа для пузырения тех ограничений до прикладного уровня как значения по умолчанию (соглашение по конфигурации). Если у меня будет некоторое взаимодействие с пользователем в форме и т.п., которая необычна тогда, то я переопределю значения по умолчанию, которые я получил от базы данных с любым новым поведением, в котором я нуждаюсь. Это помогает мне сохранить самую основную проверку, прежде всего, СУХО в слое базы данных, в то время как я делаю более сложную проверку (т.е. формат телефонного номера) на прикладном уровне.

я мог сделать проверочные ограничения для вещей как номера телефона, но я нахожу, что проверочные ограничения трудный и расстраивающий способ осуществить форматы.

, Если у меня было приложение, которое должно было получить вход от 2-го источника (т.е. он имеет и веб-интерфейс и настольный клиент) тогда любой я попытался бы заставить 2-й интерфейс работать через первое (представление настольных данных через веб-сервис, например), или в сбое этого тогда я возвратился бы к использованию проверочного ограничения в базе данных в дополнение к проверке на прикладном уровне.

Передовой я хочу поддержать целостность данных как можно больше, потому что неправильные данные неизбежно вызовут опустошение в приложении - и затем кроме того (и на самом деле одинаково важный), я хочу, чтобы приложение было в состоянии обработать проверку предоставленной информации пользователя.

8
задан skaffman 29 November 2009 в 20:08
поделиться

3 ответа

Проблема в том, что Hibernate на самом деле не выполняет удаление. База данных делает это как часть отношения внешнего ключа, поэтому Hibernate никогда не видит все объекты, которые могут быть удалены, и, следовательно, нет способа обновить кеш, который работает в каждом случае.

Я думаю, что лучше всего будет очистить кеш (или его часть) при удалении.

1
ответ дан 6 December 2019 в 01:40
поделиться

Обычно Hibernate требует политически некорректного обновления объекта для перезагрузки cahe.

Важным моментом является то, как EhCache обрабатывает ленивые свойства. Я обнаружил, что атрибут lazy коллекции не установлен, cahe не обновляет объекты.

В вашем случае, если для набора Humans атрибута humanity установлено значение lazy = true (параметр по умолчанию), ehcache не выполняет Не обновляю, если объект. Попробуйте установить для ленивого атрибута коллекций людей и детей значение false.

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

Я боролся с другой проблемой, требующей удаления коллекции из кеша, и нашел решение. Я не знаю, можно ли автоматически обновлять кеш коллекции при каскадном удалении, но если вы попробовали SessionFactory.evictCollection () и это сработало, я думаю, что это решение может быть транзакционно безопасным, и оно также работает:

if (MYCOLLECTION instanceof AbstractPersistentCollection) ((AbstractPersistentCollection) MYCOLLECTION) .dirty ();

1
ответ дан 6 December 2019 в 01:40
поделиться
Другие вопросы по тегам:

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