PostgreSQL JDBC Null String taken as a bytea

Если entity.getHistory() равен null, следующий фрагмент кода:

(getEntityManager() возвращает spring injected EntityManager, тип истории поля базы данных: text or varchar2(2000))

Query query = getEntityManager().createNativeQuery("insert into table_name(..., history, ....) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
[...]
.setParameter(6, entity.getHistory())
[...]

query.executeUpdate();

Выдает странное исключение:

17/11/11 06:26:09:009 [pool-2-thread-1]  WARN util.JDBCExceptionReporter:100 - SQL Error: 0, SQLState: 42804
17/11/11 06:26:09:009 [pool-2-thread-1] ERROR util.JDBCExceptionReporter:101 - ERROR: **column "history" is of type text but expression is of type bytea**

Подсказка: вам нужно переписать или привести выражение.

Проблема возникла только в этой конфигурации:
ОС: CentOS release 5.6 (Final)
Java: 1.6.0_26
DB: PostgreSQL 8.1
JDBC Driver: postgresql-9.1-901.jdbc4
Сервер приложений: apache-tomcat-6.0.28

Все работает нормально на нескольких других конфигурациях или когда история является пустой строкой. То же самое утверждение, выполненное из pgAdmin, работает нормально.

Я предполагаю, что проблема в драйвере PostgreSQL JDBC, есть ли какая-то разумная причина рассматривать нулевую строку как байтовое значение? Может быть, какие-то странные изменения между Postgres 8 и 9?

12
задан a_horse_with_no_name 7 May 2019 в 18:29
поделиться