从Hibernate中的java.sql.Blob获取流

amo*_*fis 3 database hibernate jpa 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());
}
Run Code Online (Sandbox Code Playgroud)

所以它引发了一个例外:

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)
    ...
Run Code Online (Sandbox Code Playgroud)

为什么?它不应该在这里读取DB的字节吗?我能做些什么让它发挥作用?

Mr *_*ack 5

尝试刷新实体:

em.refresh(fromDb);
Run Code Online (Sandbox Code Playgroud)

流将重新打开.我怀疑find(...)正在关闭blob流.