Наше JAVA-приложение имеет приблизительно 100 классов, отображенных на базе данных (SQL Server или MySQL). Мы используем, в спящем режиме как наш ORM (с XML отображающиеся файлы).
Мы указываем FOREIGN KEY
ограничения в нашей схеме базы данных. Большая часть из нашего FOREIGN KEY
ограничения также указывают ON DELETE CASCADE
.
Мы недавно начали включать, в спящем режиме 2-е кэширование уровня (для популярных объектов и наборов) для смягчения некоторых проблем производительности.
Производительность улучшилась, так как мы включили 2-й кэш уровня. Однако мы также начали встречаться с ObjectNotFoundExceptions.
Кажется, что ObjectNotFoundExceptions происходят, потому что база данных удаляет строки таблицы, внизу В спящем режиме. Например, когда мы удаляем a Parent
с В спящем режиме, схема базы данных будет ON DELETE CASCADE
любому Child
объекты. Это, очевидно, происходит без, в спящем режиме знание, таким образом, это не получает шанс обновить 2-й кэш уровня (и удалить любого удаленного Child
объекты).
Мы полагаем, что решение этой проблемы состоит в том, чтобы удалить ON DELETE CASCADE
из нашей схемы базы данных (но сохраняют FOREIGN KEY
s). Вместо этого мы должны настроить, в спящем режиме для удаления Child
зависимости с нормальным удаляют SQL, который также сделает, в спящем режиме, обновляют 2-й кэш уровня. Некоторое ограниченное тестирование показало, что этот подход, кажется, работает.
Я хотел получить некоторую общественную обратную связь на этом. Существует ли альтернатива (лучше?) решения нашей проблемы? Как другие обрабатывают эту ситуацию? В целом, что является компромиссами, которые нужно рассмотреть при использовании ON DELETE CASCADE
в схеме базы данных с В спящем режиме?
Спасибо.
Если вы всегда собираетесь удалять через свою программу, вы хотите снять ограничение с базы данных и сообщить hibernate для ON DELETE CASCADE, чтобы позаботиться о связанных ребятах.
С другой стороны, если вы собираетесь иногда удалять объекты в своем java-приложении, а иногда и на уровне вашей базы данных, вы получите странные зависшие данные. В этом случае вам может потребоваться более сложный подход. Вы не поняли, так ли это, поэтому не будем вдаваться в подробности здесь.