我正在使用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)
感谢。
答案 0 :(得分:0)
您可以在c#中使用此示例解决方案,代码应该相对类似here
我知道这不是理想的答案,但这是一个很好的起点。
答案 1 :(得分:0)
我找到了解决问题的方法。 我用来将blob转换为文件的方式还可以。因为你可能会称之为hibernate自身问题而发生异常。
为防止发生异常,我需要在保存后执行refresh()。
session.refresh(blog);
多数民众赞成。