0

我正在使用 DbUtils 来处理 PostgreSQL 和 MySQL 之间的互换性。我有点期望这是一个问题,但希望有一种干净的方法来处理类型转换。我正在使用 Flyway 进行迁移,因此我必须尽可能标准地编写我的架构,以支持它支持的所有不同类型的关系数据库,其中 PostgreSQL 和 MySQL 是主要关注点(目前)。

这是我正在使用的基本架构:

CREATE TABLE access (
  id SERIAL PRIMARY KEY,
  apikey varchar(36) NOT NULL,
  apikey_type int DEFAULT '0',
  apikey_enabled smallint DEFAULT '1',
  topicid int DEFAULT NULL,
  collection varchar(60) DEFAULT NULL,
  lastseen timestamp NULL DEFAULT NULL,
);

POJO 类如下所示:

public class ClientAccessRecord {

    private BigInteger id;

    private Integer apiKeyType;

    private boolean enabled;

    private String topic;

    private int topicId;

    private String lastRecordTime;

    private int lastRecordId;

    private String collection;
}

我在两个领域苦苦挣扎:idapikey_enabled. 我指定idSERIAL因为 PostgreSQL 不支持AUTO_INCREMENT指令。但是,SERIAL这意味着UNSIGNED INT在 PostgreSQL 和UNSIGNED BIGINTMySQL 中,会导致 DbUtils 中的转换失败BeanHandler。此外,apikey_enabled在 PostgreSQL 中失败,但在 MySQL 中没有。它在 MySQL 中将其视为布尔值,而 PostgreSQL 正在尝试转换为 int。

我在这里不知所措。尝试标准化架构时的最佳实践是什么?我是否应该避免 DbUtils 对象映射并坚持手动设置这些值的更繁琐但更可控的方法?

4

1 回答 1

0

您不必按照以下方式SERIAL在 PostgreSQL 中使用:

https://stackoverflow.com/a/6632280

这意味着您可以使用任何数据类型...

于 2019-06-03T16:29:05.513 回答