«SQLException: Unwrap error» с драйвером JDBI и PGJDBC-NG Postgres - PullRequest
0 голосов
/ 13 июня 2019

Я использую JDBI для подключения к моей базе данных Postgres.Это работало нормально.Сегодня я решил попробовать заменить родной драйвер Postgres на драйвер PGJDBC-NG .Все хорошо, пока я не попробую свой первый простой запрос:

jdbi.useExtension(FooDao.class, dao -> {
    dao.insert(e);
});

К сожалению, это приводит к:

org.jdbi.v3.core.ConnectionException: java.sql.SQLException:Ошибка развертывания

При отладке в приложении обнаружена исключительная ситуация в методе customizeHandle класса PostgresPlugin JDBI:

@Override
public Handle customizeHandle(Handle handle) {
    PGConnection pgConnection = Unchecked.supplier(() -> handle.getConnection().unwrap(PGConnection.class)).get();
    return handle.configure(PostgresTypes.class, pt -> pt.addTypesToConnection(pgConnection));
}

Исключение выдается в первой строкев методе unwrap.Кажется, проблема в том, что с новым драйвером getConnection возвращает экземпляр PGDirectConnection, который нельзя назначить из PGConnection, как указывает вызов метода unwrap.

Есть ли обходной путь для этого?Я думаю, что я мог бы просто расширить PostgresPlugin и переопределить реализацию customizeHandle, чтобы развернуть, используя PGDirectConnection, но я бы предпочел этого не делать, если это возможно.

Редактировать : Тьфу, не может переопределить customizeHandle, потому что PostgresTypes.addTypesToConnection не является общедоступным.

1 Ответ

1 голос
/ 14 июня 2019

JDBI PostgresPlugin запрашивает PGConnection напрямую;который является классом, доступным только в стандартном драйвере.Поэтому до тех пор, пока он не будет изменен для работы с NG, он не будет.

Хотя, согласно документации ...

Плагин настраивает сопоставления для типов Java 8 java.time.например, Instant или Duration, InetAddress, UUID, типизированные перечисления и hstore.

, но ничего из этого не требуется, поскольку PGJDBC-NG изначально поддерживает все эти типы!

Решение

Не используйте PostgresPlugin

...