1

我正在使用休眠将压缩文件存储在数据库中,我已经创建了 Blob 文件Hibernate.createBlob(input stream)

现在我想扭转这个过程并将 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)

谢谢。

4

2 回答 2

0

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

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

session.refresh(blog);

而已。

于 2013-07-04T08:41:29.530 回答
0

您可以在 c# 中遵循此示例解决方案,此处的代码应该相对相似

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

于 2013-07-03T16:02:33.990 回答