0

我在尝试使用休眠 JPA 从 Sybase DB 读取 blob 时遇到以下异常。

实体

@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) 不受支持,不应调用。

我遇到了以下休眠线程,该线程提供了一个链接,该链接指向如何通过将 blob 映射到二进制数据来读取和写入 blob,但是该链接已失效。

线程 https://forum.hibernate.org/viewtopic.php?f=1&t=936553

死链接 http://www.hibernate.org/73.html

我想知道是否有人可以提供一个例子或一篇文章来描述如何做到这一点?

更新

我发现以下 JIRA 问题概述了这个问题 https://issues.jboss.org/browse/JBPAPP-2867

Laura 声称“解决此问题的方法是创建映射到 Sybase 文本和图像类型的用户定义类型。”

有人熟悉创建用户定义的类型吗?

4

1 回答 1

0

您可以尝试在映射中使用 java.sql.Blob 而不是字节数组。您可以使用 Hibernate.createBlob() 函数从字节数组、字符串、输入流转换 blob。这样做的好处是延迟加载(仅在休眠会话打开之前)。

否则..在内存中加载更大的对象会消耗大量的堆空间。

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

 private Blob getBlob()
 {
   return Hibernate.createBlob(this.image);
 }
于 2012-04-13T14:08:45.757 回答