From 174c5bdb56c7a2597e684b2ebf8af7e5ee5b71d9 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 15 Mar 2021 10:05:35 +0100 Subject: [PATCH] =?UTF-8?q?Call=20Statement.returnGeneratedValues(?= =?UTF-8?q?=E2=80=A6)=20using=20the=20ID=20column=20name.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../data/r2dbc/core/R2dbcEntityTemplate.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java index 3cc48ba4..8aede1d6 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java +++ b/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java @@ -565,8 +565,17 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw PreparedOperation operation = mapper.getMappedObject(insert); + List 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)