我想用java.sql.Blob中的hibernate @Entity来存储一些二进制数据。存储不会抛出任何异常(但是,我不确定它是否真的存储了字节),但是读取确实存在。下面是我的测试:在休眠中从java.sql.Blob获取流
@Test
public void shouldStoreBlob() {
InputStream readFile = getClass().getResourceAsStream("myfile");
Blob blob = dao.createBlob(readFile, readFile.available());
Ent ent = new Ent();
ent.setBlob(blob);
em.persist(ent);
long id = ent.getId();
Ent fromDb = em.find(Ent.class, id);
//Exception is thrown from getBinaryStream()
byte[] fromDbBytes = IOUtils.toByteArray(fromDb.getBlob().getBinaryStream());
}
所以它抛出一个异常:
java.sql.SQLException: could not reset reader
at org.hibernate.engine.jdbc.BlobProxy.getStream(BlobProxy.java:86)
at org.hibernate.engine.jdbc.BlobProxy.invoke(BlobProxy.java:108)
at $Proxy81.getBinaryStream(Unknown Source)
...
为什么?它不应该在这里读取字节表单DB吗?我能为它做些什么?
我们需要知道在我们尝试回答这个问题之前抛出的异常是什么。 – adarshr 2011-02-18 15:23:49
增加了例外。 – amorfis 2011-02-18 15:29:29