Проблема преобразования типов DbUtils во время сериализации объектов - PullRequest
0 голосов
/ 31 мая 2019

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

1 Ответ

0 голосов
/ 03 июня 2019

Вам не нужно использовать SERIAL в PostgreSQL согласно:

https://stackoverflow.com/a/6632280

Это означает, что вы можете использовать любой тип данных ...

...