I am using DbUtils to handle interchangeability between PostgreSQL and MySQL. I kind of expected this to be an issue but was hoping there would be a clean way to handle type conversion. I am using Flyway to do my migrations, so I have to write my schema as standard as possible to support all the different types of relational databases it supports, with PostgreSQL and MySQL being a primary focus (for now).
Here is a basic schema that I am working with:
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,
);
Here is what the POJO class looks like:
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;
}
I am struggling with two fields: id and apikey_enabled. I have specified id to be SERIAL because PostgreSQL does not support AUTO_INCREMENT directive. However, SERIAL means UNSIGNED INT in PostgreSQL and UNSIGNED BIGINT in MySQL, resulting in a conversion failure in DbUtils BeanHandler. Furthermore, the apikey_enabled fails in PostgreSQL but not in MySQL. It treats it as a boolean in MySQL while PostgreSQL is trying to convert into an int. 
I am at a loss here. What are the best practices when trying to standardize schema's? Should I avoid DbUtils object mapping and stick to the more tedious, albeit more control, approach of manually setting these values?
 
    