По какой-то причине этот API может вызываться дважды одновременно, поэтому у меня есть внесено изменение, чтобы не создавать запись дважды (добавив транзакцию). Однако при каждом запуске кода создаются две записи.
Два вызова API используют один и тот же экземпляр DSLContext, но каждый вызов выполняется в отдельном потоке.
Пример кода:
Код: Выделить всё
public static Record getOrCreateData(int id, DSLContext dslContext) {
var result = dslContext.transactionResult(config -> {
var dsl = DSL.using(config);
var existingData = dsl
.selectFrom(TABLE1)
.where(TABLE1.LINK_ID.eq(id))
.fetchOptionalInto(RecordDto.class);
if ( existingData.isPresent() ) {
return existingData.get();
}
var record = dsl.newRecord(TABLE1);
...
record.store();
return record.into(RecordDto.class);
});
return result;
}
Как это исправить?
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-expected
Мобильная версия