通过将blob映射到二进制数据来读取和写入blob

时间:2012-04-13 13:03:41

标签: java hibernate sybase hibernate-mapping

尝试使用hibernate 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上触发事件'activate' TapestryModule.RequestExceptionHandler请求处理因未捕获异常而失败:不支持com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String)方法,不应调用该方法。 org.apache.tapestry5.ioc.internal.OperationException:不支持com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String)方法,不应该调用它。

我遇到了以下hibernate线程,该线程提供了一个链接到如何通过将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文本和图像类型的用户定义类型。”

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

1 个答案:

答案 0 :(得分:0)

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

否则..内存加载较大的对象会占用大量的堆空间。

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

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