【问题标题】:read and write blobs by mapping them to binary data通过将 blob 映射到二进制数据来读取和写入 blob
【发布时间】:2012-04-25 20:23:30
【问题描述】:

我在尝试使用休眠 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 文本和图像类型的用户定义类型。”

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

【问题讨论】:

标签: java hibernate sybase hibernate-mapping


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗨 Ram,我有点困惑,我尝试使用 blob 作为数据类型,私有 Blob 内容,但出现编译错误,“基本属性只能是以下类型:Java 原始类型” .我也不确定你对 toByteArray 做了什么。您能否详细说明一下您的示例。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2012-07-23
  • 1970-01-01
  • 2014-04-15
  • 2018-11-12
  • 2016-04-16
  • 2011-12-22
相关资源
最近更新 更多