diff --git a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/AdpPostgreSQLDialect.java b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/AdpPostgreSQLDialect.java new file mode 100644 index 00000000..8552c674 --- /dev/null +++ b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/config/dialect/AdpPostgreSQLDialect.java @@ -0,0 +1,37 @@ +package tech.powerjob.server.persistence.config.dialect; + +import org.hibernate.dialect.PostgreSQL10Dialect; +import org.hibernate.type.descriptor.sql.LongVarbinaryTypeDescriptor; +import org.hibernate.type.descriptor.sql.LongVarcharTypeDescriptor; +import org.hibernate.type.descriptor.sql.SqlTypeDescriptor; + +import java.sql.Types; + +/** + * PG数据库方言 + * 使用方自行通过配置文件激活:spring.datasource.remote.hibernate.properties.hibernate.dialect=tech.powerjob.server.persistence.config.dialect.AdpPostgreSQLDialect + * + * @author litong0531 + * @since 2024/8/11 + */ +public class AdpPostgreSQLDialect extends PostgreSQL10Dialect { + + public AdpPostgreSQLDialect() { + super(); + registerColumnType(Types.BLOB, "bytea"); + registerColumnType(Types.CLOB, "text"); + } + + @Override + public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) { + switch (sqlTypeDescriptor.getSqlType()) { + case Types.CLOB: + return LongVarcharTypeDescriptor.INSTANCE; + case Types.BLOB: + return LongVarbinaryTypeDescriptor.INSTANCE; + case Types.NCLOB: + return LongVarbinaryTypeDescriptor.INSTANCE; + } + return super.remapSqlTypeDescriptor(sqlTypeDescriptor); + } +}