Точная ошибка:
"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 , ссылка уже используется
Я много чего перепробовал.
Я открыт для любых предложений.Цель - поле должно быть уникальным и буквенно-цифровым.
Я пробовал это, например:
Приращение строки для буквенно-цифрового поля для JPA не работает
QQ prefix