себя загрузку изображений также. Так вот, если повторно импортировать, то получаю DuplicateKeyException, оно и понятно. Вопрос вот в чем: как лучше обработать эту ошибку?
1) entityManager.contains(Object obj)
2) перед загрузкой изображений сделать запрос в БД со списком ID и вернуть список не найденных, то есть еще не сохраненных файлов (мне нравится этот вариант, потому что сэкономлю ресурсы, если не буду загружать частично файлы или вовсе не стану этого делать)
3) проигнорировать ошибку, записав лишь в логах
Советую - 2, но там ещё нужно глянуть, возможно ли что две разные транзакции, работающие параллельно, будут импортить один и тот же файл
ни один из способов не даёт гарантию, констрейнты проверяются на этапе коммита транзакции, никто не помешаетвсунуть в бд запись между твоими проверкой и записью поэтому экзепшн никуда девать не надо, можно например побить пачку изображений на части и коммитить по отдельности (обрабатывая экзепшн ретраем или как-то иначе)
Спасибо за подробный ответ, но почему нужно ретраить DKE?
если данные не теряют смысл от дублирования, например коллизия при генерации суррогатного PK случилась
Обсуждают сегодня