Я использую 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 и придерживаться более утомительного, хотя и большего контроля, подхода к ручной установке этих значений?