我正在使用 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;
}
我在两个领域苦苦挣扎:id
和apikey_enabled
. 我指定id
是SERIAL
因为 PostgreSQL 不支持AUTO_INCREMENT
指令。但是,SERIAL
这意味着UNSIGNED INT
在 PostgreSQL 和UNSIGNED BIGINT
MySQL 中,会导致 DbUtils 中的转换失败BeanHandler
。此外,apikey_enabled
在 PostgreSQL 中失败,但在 MySQL 中没有。它在 MySQL 中将其视为布尔值,而 PostgreSQL 正在尝试转换为 int。
我在这里不知所措。尝试标准化架构时的最佳实践是什么?我是否应该避免 DbUtils 对象映射并坚持手动设置这些值的更繁琐但更可控的方法?