Проблема обновления BLOB с помощью Hibernate? - PullRequest
1 голос
/ 30 марта 2010

У меня проблема с обновлением BLOB-объекта с помощью Hibernate. (я использую Hibernate 3.3.1-GA)

у моей модели есть эти геттеры / сеттеры для гибернации, то есть внутренне я имею дело с байтом [], так что любой получатель / установщик конвертирует байт [] в блог.

Я могу создать исходный объект без проблем, но если я пытаюсь изменить содержимое большого двоичного объекта, столбец базы данных не обновляется. Я не получаю никаких сообщений об ошибках, все выглядит хорошо, за исключением того, что база данных не обновляется.

/** do not use, for hibernate only */
public Blob getLogoBinaryBlob() {
    if(logoBinary == null){
        return null;
    }
    return Hibernate.createBlob(logoBinary);
}

/** do not use, for hibernate only */
public void setLogoBinaryBlob(Blob logoBinaryBlob) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        logoBinary = toByteArrayImpl(logoBinaryBlob, baos);
    } catch (Exception e) {
    }
  }

мой спящий мэппинг для капли выглядит как

<property name="logoBinaryBlob" column="LOGO_BINARY" type="blob" />

Используется база данных Oracle.

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Ух, я наконец-то смог найти решение для обновления данных BLOB с помощью Hibernate.


session.merge(domain); // changes blob value to 44

Изменение на это устраняет проблему:

Domain merged = (Domain) session.merge(domain);
merged.setBlob(Hibernate.createBlob(domain.getBlob().getBinaryStream()));

Спасибо Крису Бредесену за его пост .

0 голосов
/ 31 марта 2010

Хорошо, в итоге я создал отдельную таблицу для большого двоичного объекта, и при любом обновлении основного объекта он будет удалять и создавать новые записи в отдельной таблице. (следовательно, обновления не выполняются)

Не идеально, но работает.

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