如何将Hibernate Blob转换回原始文件

时间:2013-07-03 15:49:36

标签: java hibernate

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

现在我要反转该过程并将Blob转换为File,以便我可以使用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)

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在c#中使用此示例解决方案,代码应该相对类似here

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

答案 1 :(得分:0)

我找到了解决问题的方法。 我用来将blob转换为文件的方式还可以。因为你可能会称之为hibernate自身问题而发生异常。

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

session.refresh(blog);

多数民众赞成。