【发布时间】:2012-12-14 01:29:15
【问题描述】:
我正在尝试使用 JPA(2.0) 将图像作为 blob 保存在 oracle 数据库(11g) 中
下面是我的实体类
@Entity
@Table(name="MyTable")
public class MyEntity implements Serializable {
@Column(name="IMAGE_BLOB")
private Blob imageBlob;
public void setImageBlob(Blob imageBlob) {
this.imageBlob = imageBlob;
}
public Blob getImageBlob() {
return imageBlob;
}
}
下面是我尝试设置 blob 的代码
InputSteram fis = new FileInputStream("C://folder1/folder2/image1.jpg");
byte[] imageByteArray= IOUtils.toByteArray(fis);
Blob imageBlob = new SerialBlob(imageByteArray);
MyEntity myEntity = new MyEntity();
myEntity.setImageBlob(imageBlob ).
当我运行上述代码 sn-p 并将 MyEntity 持久保存到数据库中时,我看到所有值都正确保存在数据库中,除了显示为 null 的 IMAGE_BLOB 列值,它会抛出任何异常。我还验证了要设置的 imageBlob 不为空。
谁能帮我解决这个问题。
【问题讨论】:
-
您使用 Blob 对象而不是字节数组有什么特别的原因吗?
-
是的,我在字节数组方面遇到了几个问题,一个 - 我得到类转换异常,oracle.sql.BLOB 与 oracle.sql.BLOB 不兼容 2) 我遇到了元模型类奇异属性的问题在 JPA 中。所以我被告知使用 java.sql.Blob 而不是字节数组。
-
之后您如何查询以检查 BLOB?我假设您正在验证长度 > 0?
-
是的,我还检查了 blob 的长度,在我的例子中是 4930。
-
如何使用 JDBC Blob 而不是供应商特定的 Blob?每次我看到 Oracle 和 BLOB 出现问题时,解决方案都是停止尝试使用供应商特定的东西并使用 JDBC 正确地完成它。你在用
java.sql.Blob吗?
标签: java jpa oracle11g blob openjpa