Skip to content

Commit 5ada6db

Browse files
committed
fix(PostgreSQL): 修复BatchUpsertOperator处理多主键时的拼接逻辑错误
1 parent 16e0d21 commit 5ada6db

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/supports/postgres/PostgresqlBatchUpsertOperator.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,22 @@ SqlFragments createOnConflict() {
6060
if (primaryColumns == null) {
6161
primaryColumns = new HashSet<>();
6262
}
63-
RDBColumnMetadata idColumn = table
63+
Set<RDBColumnMetadata> idColumn = table
6464
.getColumns()
6565
.stream()
6666
.filter(RDBColumnMetadata::isPrimaryKey)
67-
.findFirst()
68-
.orElse(null);
69-
if (idColumn != null) {
70-
primaryColumns.add(idColumn.getName());
71-
return SqlFragments.of("on conflict (", idColumn.getQuoteName(), ") do ");
67+
.collect(Collectors.toSet());
68+
if (CollectionUtils.isNotEmpty(idColumn)) {
69+
for (RDBColumnMetadata rdbColumnMetadata : idColumn) {
70+
primaryColumns.add(rdbColumnMetadata.getName());
71+
}
72+
return SqlFragments
73+
.of("on conflict (",
74+
idColumn
75+
.stream()
76+
.map(c -> c.getQuoteName())
77+
.collect(Collectors.joining(",")),
78+
") do ");
7279
}
7380
RDBIndexMetadata indexMetadata = table
7481
.getIndexes()

0 commit comments

Comments
 (0)