对象序列化期间的java DbUtils类型转换问题
我使用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
在PostgreSQL中表示UNSIGNED INT
,在MySQL中表示UNSIGNED BIGINT
,这导致DbUtilsBeanHandler
中的转换失败。此外,apikey_enabled
在PostgreSQL中失败,但在MySQL中失败。当PostgreSQL试图转换为int时,它在MySQL中将其视为布尔值
我在这里不知所措。当尝试标准化模式时,最佳实践是什么?我是否应该避免DbUtils对象映射,而坚持手动设置这些值的更繁琐(尽管控制更多)的方法
# 1 楼答案
您不必按照以下要求在PostgreSQL中使用
SERIAL
:https://stackoverflow.com/a/6632280
这意味着您可以使用任何数据类型