Не удалось выполнить оператор; для уникальности DataIntegrityViolationException:

Точная ошибка:

"DataIntegrityViolationException : could not execute statement; SQL [n/a]; constraint [UCIDXNUFQCFS2J6QMVYBIXJFNORH8C]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement (Duplicate entry 'QQAB3GY' for key 'UCIDXNUFQCFS2J6QMVYBIXJFNORH8C')

В моем классе есть поля id и non-id, которые являются alphanumeric и имеют 5 символов и уникальный и 2-символьный префикс:

public class Holiday {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @NotNull
    @Column(unique = true)
    @Size(min = 7, max = 7)
    private String reference;

}

Я устанавливаю это поле code в другом сервисе:

@Transactional(isolation = SERIALIZABLE)
@Override
public String generateReference(String productCode) {

    ReferenceGenerator referenceGenerator = referenceGeneratorRepository.findByMnemonic(productCode);

    if (referenceGenerator != null) {
        referenceGenerator.setValue(incrementReference(referenceGenerator.getValue()));
        referenceGeneratorRepository.save(referenceGenerator);
    } else {
        referenceGenerator = referenceGeneratorRepository.save(new ReferenceGenerator(PREAPP, START_VALUE_FOR_REFERENCE_CODE));
    }

    return PREFIX_OF_REFERENCE_CODE + referenceGenerator.getValue();
}

Ставлю вот так:

private final ReferenceGeneratorService referenceGeneratorService;
Holiday holiday = new Holiday();
holiday.setReference(referenceGeneratorService.generateReference(PREAPP));

База данных - это mysql, и мы используем spring boot..

Когда я отправляю несколько запросов одновременно, например, от swagger, он может дать

DataIntegrityViolationException, the reference is already used

Я много чего перепробовал.

Я открыт для любых предложений. Назначение - поле должно быть уникальным и буквенно-цифровым.

Я пробовал это, например:

Приращение строки для буквенно-цифрового поля для JPA не работает

QQ - это prefix

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

Anas 23.11.2018 11:01

@Anas Я попытался отправить несколько запросов на сохранение, поэтому это происходит из-за этого. Если я отлаживаю, я не могу сделать это так быстро. Отправляю 10-15 запросов за 10 секунд на сохранение. Так что, вероятно, он не может заблокировать базу данных.

asdasasd 23.11.2018 14:57

Предполагая, что если вы отлаживаете запрос 10 15 и проблема не возникает, это означает, что это проблема параллелизма, и поскольку весенняя загрузка работает с потоками для каждого запроса, можете ли вы попробовать использовать любой параллельный объект? Например ConcurrentHashMap

Anas 26.11.2018 07:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
51
0

Другие вопросы по теме