【问题标题】:how to convert Hibernate Blob back to original File如何将 Hibernate Blob 转换回原始文件
【发布时间】:2023-04-09 09:29:01
【问题描述】:

我正在使用 hibernate 将压缩文件存储在数据库中,我创建了带有 Hibernate.createBlob(input stream) 的 Blob 文件

现在我想反转该过程并将 Blob 转换为文件,以便我可以使用 Zip4j 打开它 我到底应该怎么做? 我试图这样做,但我总是得到一个例外

  File file = new File("origfile.zip");
    try {
        InputStream is = blob.getBinaryStream(); <- exception
        FileOutputStream opt = new FileOutputStream(file);
        int read = 0;
        byte[] bytes = new byte[1024];
        while ((read = is.read(bytes)) != -1) {
            opt.write(bytes, 0, read);
        }

例外是:

2013-07-03 18:38:35,482 [DEBUG] [HibernateTransactionManager,doBegin(),569] - Exposing 
Hibernate transaction as JDBC transaction [com.mchange.v2.c3p0.impl.NewProxyConnection@69875a82]
java.sql.SQLException: could not reset reader
at org.hibernate.lob.BlobImpl.getBinaryStream(BlobImpl.java:106)
at org.hibernate.lob.SerializableBlob.getBinaryStream(SerializableBlob.java:62)
at com.gleeb.backbonetemplates.services.LivePreviewService.prepareDesignForLivePreview(LivePreviewService.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

谢谢。

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    你可以在c#中按照这个示例解决方案,代码应该比较相似here

    我知道这不是理想的答案,但这是一个很好的起点。

    【讨论】:

    • 概念很好理解,这是java/Hibernate的技术问题。不过还是谢谢
    【解决方案2】:

    我找到了解决问题的方法。 我用来将 blob 转换为文件的方式还可以。发生异常是因为您可能会调用它的休眠自身问题。

    为防止发生异常,我需要在保存后执行 refresh()。

    session.refresh(blog);
    

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2015-02-28
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2014-02-24
      相关资源
      最近更新 更多