我试图通过Hibernate 4.3.5 API创建blob。 H2 1.4.190在内存中。最初代码是为Oracle DB编写的,现在我们正在尝试使用H2进行单元测试。
Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[]{0});
blob.setBinaryStream(1);
在createBlob()期间,堆栈如下:
at org.h2.value.ValueLobDb.<init>(ValueLobDb.java:75)
at org.h2.value.ValueLobDb.createSmallLob(ValueLobDb.java:667)
at org.h2.value.ValueLobDb.createSmallLob(ValueLobDb.java:654)
at org.h2.store.LobStorageMap.createBlob(LobStorageMap.java:162)
at org.h2.jdbc.JdbcConnection.createBlob(JdbcConnection.java:1826)
at org.h2.jdbc.JdbcBlob.setBytes(JdbcBlob.java:124)
at org.hibernate.engine.jdbc.ContextualLobCreator.createBlob(ContextualLobCreator.java:68)
构造函数中的precision设置为1(因为单字节数组用作createBlob参数?)。接下来setBinaryStream(1)抛出异常。
我做错了什么或是这个H2问题?
答案 0 :(得分:0)
好的,为找到有用的人发布答案:
显然我是told here:
出于某种原因,Hibernate似乎没有API来创建 适当的空Blob,调用setBinaryStream是合法的 空Blob
所以我不得不:
Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[0]);
blob.setBinaryStream(1);