Aus irgendeinem Grund kann diese API zweimal gleichzeitig aufgerufen werden, daher habe ich das getan hat eine Änderung vorgenommen, um den Datensatz nicht zweimal zu erstellen (durch Hinzufügen einer Transaktion). Allerdings werden jedes Mal, wenn der Code ausgeführt wird, zwei Datensätze erstellt.
Zwei API-Aufrufe nutzen dieselbe DSLContext-Instanz, aber jeder Aufruf wird in einem separaten Thread ausgeführt.
Beispielcode:
Code: Select all
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;
}
Wie kann ich das beheben?