mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复PostgreSQL使用upsert字段大小写问题问题
This commit is contained in:
@@ -14,6 +14,7 @@ package org.dromara.hutool.db.dialect.impl;
|
|||||||
|
|
||||||
import org.dromara.hutool.core.lang.Assert;
|
import org.dromara.hutool.core.lang.Assert;
|
||||||
import org.dromara.hutool.core.array.ArrayUtil;
|
import org.dromara.hutool.core.array.ArrayUtil;
|
||||||
|
import org.dromara.hutool.core.text.CharUtil;
|
||||||
import org.dromara.hutool.core.text.StrUtil;
|
import org.dromara.hutool.core.text.StrUtil;
|
||||||
import org.dromara.hutool.db.Entity;
|
import org.dromara.hutool.db.Entity;
|
||||||
import org.dromara.hutool.db.StatementUtil;
|
import org.dromara.hutool.db.StatementUtil;
|
||||||
@@ -28,14 +29,17 @@ import java.sql.SQLException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Postgree方言
|
* Postgree方言
|
||||||
* @author loolly
|
|
||||||
*
|
*
|
||||||
|
* @author loolly
|
||||||
*/
|
*/
|
||||||
public class PostgresqlDialect extends AnsiSqlDialect{
|
public class PostgresqlDialect extends AnsiSqlDialect {
|
||||||
private static final long serialVersionUID = 3889210427543389642L;
|
private static final long serialVersionUID = 3889210427543389642L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造
|
||||||
|
*/
|
||||||
public PostgresqlDialect() {
|
public PostgresqlDialect() {
|
||||||
quoteWrapper = new QuoteWrapper('"');
|
quoteWrapper = new QuoteWrapper(CharUtil.DOUBLE_QUOTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -54,7 +58,7 @@ public class PostgresqlDialect extends AnsiSqlDialect{
|
|||||||
final StringBuilder updateHolder = new StringBuilder();
|
final StringBuilder updateHolder = new StringBuilder();
|
||||||
|
|
||||||
// 构建字段部分和参数占位符部分
|
// 构建字段部分和参数占位符部分
|
||||||
entity.forEach((field, value)->{
|
entity.forEach((field, value) -> {
|
||||||
if (StrUtil.isNotBlank(field)) {
|
if (StrUtil.isNotBlank(field)) {
|
||||||
if (fieldsPart.length() > 0) {
|
if (fieldsPart.length() > 0) {
|
||||||
// 非第一个参数,追加逗号
|
// 非第一个参数,追加逗号
|
||||||
@@ -65,7 +69,7 @@ public class PostgresqlDialect extends AnsiSqlDialect{
|
|||||||
|
|
||||||
final String wrapedField = (null != quoteWrapper) ? quoteWrapper.wrap(field) : field;
|
final String wrapedField = (null != quoteWrapper) ? quoteWrapper.wrap(field) : field;
|
||||||
fieldsPart.append(wrapedField);
|
fieldsPart.append(wrapedField);
|
||||||
updateHolder.append(wrapedField).append("=EXCLUDED.").append(field);
|
updateHolder.append(wrapedField).append("=EXCLUDED.").append(wrapedField);
|
||||||
placeHolder.append("?");
|
placeHolder.append("?");
|
||||||
builder.addParams(value);
|
builder.addParams(value);
|
||||||
}
|
}
|
||||||
@@ -76,14 +80,14 @@ public class PostgresqlDialect extends AnsiSqlDialect{
|
|||||||
tableName = this.quoteWrapper.wrap(tableName);
|
tableName = this.quoteWrapper.wrap(tableName);
|
||||||
}
|
}
|
||||||
builder.append("INSERT INTO ").append(tableName)
|
builder.append("INSERT INTO ").append(tableName)
|
||||||
// 字段列表
|
// 字段列表
|
||||||
.append(" (").append(fieldsPart)
|
.append(" (").append(fieldsPart)
|
||||||
// 更新值列表
|
// 更新值列表
|
||||||
.append(") VALUES (").append(placeHolder)
|
.append(") VALUES (").append(placeHolder)
|
||||||
// 定义检查冲突的主键或字段
|
// 定义检查冲突的主键或字段
|
||||||
.append(") ON CONFLICT (").append(ArrayUtil.join(keys,", "))
|
.append(") ON CONFLICT (").append(ArrayUtil.join(keys, ", "))
|
||||||
// 主键冲突后的更新操作
|
// 主键冲突后的更新操作
|
||||||
.append(") DO UPDATE SET ").append(updateHolder);
|
.append(") DO UPDATE SET ").append(updateHolder);
|
||||||
|
|
||||||
return StatementUtil.prepareStatement(conn, builder);
|
return StatementUtil.prepareStatement(conn, builder);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user