Считывать и записывать капли, сопоставляя их с двоичными данными

Я получаю следующее исключение, пытаясь прочитать blob из базы данных Sybase с использованием hibernate JPA.

Объект

@Lob
@Column(length=100000)    
private byte[] fileContent;

public byte[] getFileContent() {
    return fileContent;
}

public void setFileContent(byte[] fileContent) {
    this.fileContent = fileContent;
}

ioc.Registry Метод com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String) не поддерживается и не должен вызываться. Трассировка операций ioc.Registry: ioc.Registry [1] Запуск события "активировать" на Purchase_Request TapestryModule.RequestExceptionHandler Обработка запроса завершилась с неперехваченным исключением: метод com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String) не поддерживается и не должен вызываться. org.apache.tapestry5.ioc.internal.OperationException: метод com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String) не поддерживается и не должен вызываться.

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

Тема https://forum.hibernate.org/viewtopic.php?f=1&t=936553

Dead Link http://www.hibernate.org/73.html

Мне интересно, может ли кто-нибудь представить пример или статью, описывающую, как это сделать?

ОБНОВЛЕНИЕ

Я нашел следующую проблему JIRA, в которой излагалась эта проблема https://issues.jboss.org/browse/JBPAPP-2867

Лаура утверждает, что "Обходной путь для этой проблемы заключается в создании пользовательских типов, которые сопоставляются с текстом и типами Sybase".

Кто-нибудь знаком с созданием определенного пользователем типа?

Ответ 1

Вы можете попробовать использовать java.sql.Blob вместо байтового массива в вашем сопоставлении. Вы можете использовать функцию Hibernate.createBlob() для преобразования blob из байтового массива, String, потока ввода. Преимущество этого - ленивая загрузка (только до тех пор, пока сеанс гибернации не будет открыт).

В противном случае.. загрузка памяти более крупного объекта может потреблять много кучи.

 private void setBlob(Blob blob) 
 {
    this.image = toByteArray(blob);
 }

 private Blob getBlob()
 {
   return Hibernate.createBlob(this.image);
 }