Skip to content

使用PG数据库,还是会出现oid类型的列,使用文档所说的如下配置类激活了,没有用。解决方法我放下面了 #750

@litong0531

Description

@litong0531

这个类不能起到效果
public class PowerJobPGDialect extends PostgreSQL10Dialect {

/**
 * 使用 {@link Types#LONGVARCHAR} 覆盖 {@link Types#CLOB} 类型
 *
 * 注意,如果在 PG 库创建表时使用的列类型为 oid ,那么这样会导致没法正确读取数据
 * 在 PowerJob 中能这样用是因为 PowerJob 的所有实体类中被 @Lob 注解标记的列对应数据库中的字段类型都是 text
 * 另外还需要注意数据库版本,如果是 10.x 以前的,需自行提供一个合适的 Dialect 类(选择合适的版本继承)
 *
 * 更多内容请关注该 issues:https://github.com/PowerJob/PowerJob/issues/153
 */
@Override
public SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode) {
    return Types.CLOB == sqlCode ? LongVarcharTypeDescriptor.INSTANCE : null;
}

}

解决方法:
重写一个类,使用配置文件指定全限定名路径来激活
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);
}

}
这个什么时候可以更新到版本中去?还是我自己本地打包自己用?

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions