diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/SqlGenerator.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/SqlGenerator.java index dc2a8f1187..1aecf62ad8 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/SqlGenerator.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/SqlGenerator.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -66,6 +67,8 @@ class SqlGenerator { private final Lazy deleteByListSql = Lazy.of(this::createDeleteByListSql); private final SqlGeneratorSource sqlGeneratorSource; + private final Pattern parameterPattern = Pattern.compile("\\W"); + SqlGenerator(RelationalMappingContext context, RelationalPersistentEntity entity, SqlGeneratorSource sqlGeneratorSource) { @@ -340,6 +343,7 @@ private String createInsertSql(Set additionalColumns) { String tableColumns = String.join(", ", columnNamesForInsert); String parameterNames = columnNamesForInsert.stream()// + .map(this::columnNameToParameterName) .map(n -> String.format(":%s", n))// .collect(Collectors.joining(", ")); @@ -353,10 +357,11 @@ private String createUpdateSql() { String setClause = columnNames.stream() // .filter(s -> !s.equals(entity.getIdColumn())) // .filter(s -> !readOnlyColumnNames.contains(s)) // - .map(n -> String.format("%s = :%s", n, n)) // + .map(n -> String.format("%s = :%s", n, columnNameToParameterName(n))) // .collect(Collectors.joining(", ")); - return String.format(updateTemplate, entity.getTableName(), setClause, entity.getIdColumn(), entity.getIdColumn()); + return String.format(updateTemplate, entity.getTableName(), setClause, entity.getIdColumn(), + columnNameToParameterName(entity.getIdColumn())); } private String createDeleteSql() { @@ -447,4 +452,8 @@ private String cascadeConditions(String innerCondition, PersistentPropertyPath