Если entity.getHistory () равен нулю, следующий фрагмент кода:
(getEntityManager () возвращает вставленный в пружину EntityManager, тип истории поля базы данных: text или 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 выпуск 5.6 (финал)
Java: 1.6.0_26
БД: PostgreSQL 8.1
Драйвер JDBC: postgresql-9.1-901.jdbc4
Сервер приложений: apache-tomcat-6.0.28
Все отлично работает на нескольких других конфигурациях или когда история пустая строка.
То же утверждение, выполненное из pgAdmin, работает нормально.
Полагаю, проблема в драйвере JDBC PostgreSQL. Есть ли какая-то разумная причина рассматривать нулевую строку как значение в байтах? Может быть, какие-то странные изменения между Postgres 8 и 9?