Postgresql 8.4 для чтения больших двоичных объектов в стиле OID с помощью Hibernate - PullRequest
2 голосов
/ 11 июня 2010

Я получаю этот странный случай, когда запрашиваю Postgres 8.4 для некоторых записей с BLOB-объектами (типа OID) с Hibernate.Запрос действительно возвращается нормально, но когда мой код хочет прочитать содержимое BLOB с помощью простого кода ниже, он возвращает 0 байт

public static byte[] readBlob(Blob blob) throws Exception {
    InputStream is = null;
    try {
        is = blob.getBinaryStream();
        return org.apache.commons.io.IOUtils.toByteArray(is);
    }
    finally {
        if (is != null)
            try {
                is.close();
            }
            catch(Exception e) {}
    }
}

Забавно, что я получаю такое поведение только посленачал добавлять в таблицу более одной такой записи.Базовая библиотека JDBC имеет тип 3 (postgresq 8.4-701).Может кто-нибудь подсказать, как решить эту проблему?Спасибо

Питер

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Похоже, вы нашли эту ошибку: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4876

0 голосов
/ 12 июня 2010

Прошло много времени с тех пор, как я столкнулся с подобной проблемой, и так как я освежил свои воспоминания об этой теме, я думаю поделиться результатами. Проблема заключается в том, что Postgres (и несколько версий обратно Oracle) не будут обрабатывать содержимое Blob во время создания записи в той же транзакции. Забавно думать, что нужно передать контент после того, как внешний файл (где контент в конечном итоге будет сохранен) был хорошо создан и зарезервирован для операции. Да, запись создается, но BLOB-объект пуст. Чтобы заполнить BLOB-объект тем, что вам нужно вставить, эта операция необходима во второй транзакции (что-то вроде записи обновления). Это забавное дело (возможно, серьезная ошибка), эх

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...