У вас может быть столбец bytea, отображаемый как двоичный файл типа Hibernate. В Java данные bytea соответственно представлены как byte [].
Когда вы устанавливаете данные, они правильно отображаются в вашей базе данных PostreSQL 9.0.
Например:
set( [ 1, 2, 0, 1, 255, 0 ] )
Показывает в нормальном выводе SQL-запроса как:
\x010201ff00
Когда Hibernate вызывает вашу подпрограмму java set () для загрузки данных, они неверны. Все, кроме первого байта, заменены на ASCII-представление значения байта. Точка останова в функции set () и наблюдение за вызовом Hibernate с помощью:
set( [ 1, 50, 48, 49, 102, 102, 48 ] )
эквивалентно:
set( [ 1, '2', '0', '1', 'f, 'f', '0' ] )
PostgreSQL 9.0 изменил свой вывод байтов по умолчанию с 'escape' на 'hex'. Это смущает (по крайней мере) версии спящего режима до 9.0.
Для разрешения отредактируйте файл postgresql.conf и измените настройку «bytea_output» с «hex» на «escape», восстановив старый формат вывода. Перезагрузите сервер.
...
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
bytea_output = 'escape' # hex, escape escape is REQUIRED BY HIBERNATE 3.3.2GA
#xmlbinary = 'base64'
#xmloption = 'content'
...
Ваши данные SQL-запроса теперь также будут отображаться в более традиционной восьмеричной форме:
\001\002\000\001\377\000
Поскольку hex легче читать, кто-нибудь знает, как настроить Hibernate 3.3.2GA для понимания шестнадцатеричного формата?