Call Statement.returnGeneratedValues(…) using the ID column name.

We now call Statement.returnGeneratedValues(…) with the primary key column name to ensure consistent behavior across all drivers and to avoid non-portable behavior.

Closes #558
This commit is contained in:
Mark Paluch
2021-03-15 10:05:35 +01:00
parent 0c20272e9b
commit 174c5bdb56

View File

@@ -565,8 +565,17 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw
PreparedOperation<?> operation = mapper.getMappedObject(insert);
List<SqlIdentifier> identifierColumns = dataAccessStrategy.getIdentifierColumns(entity.getClass());
return this.databaseClient.sql(operation) //
.filter(statement -> statement.returnGeneratedValues())
.filter(statement -> {
if (identifierColumns.isEmpty()) {
return statement.returnGeneratedValues();
}
return statement.returnGeneratedValues(dataAccessStrategy.toSql(identifierColumns.get(0)));
})
.map(this.dataAccessStrategy.getConverter().populateIdIfNecessary(entity)) //
.all() //
.last(entity)