169 похожих чатов

Я импортирую данные из стороннего сервиса и процесс включает в

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

4 ответов

22 просмотра

Советую - 2, но там ещё нужно глянуть, возможно ли что две разные транзакции, работающие параллельно, будут импортить один и тот же файл

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

Rakhmonov- Автор вопроса
Роман Нагаев
ни один из способов не даёт гарантию, констрейнты ...

Спасибо за подробный ответ, но почему нужно ретраить DKE?

Rakhmonov
Спасибо за подробный ответ, но почему нужно ретраи...

если данные не теряют смысл от дублирования, например коллизия при генерации суррогатного PK случилась

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта