Считывать и записывать капли, сопоставляя их с двоичными данными
Я получаю следующее исключение, пытаясь прочитать 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);
}