Blob.setBinaryStream(1)抛出无效值" 1"参数"长度" [90008-190]

时间:2015-12-28 21:30:20

标签: hibernate blob h2 h2db

我试图通过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问题?

1 个答案:

答案 0 :(得分:0)

好的,为找到有用的人发布答案:

显然我是told here

  

出于某种原因,Hibernate似乎没有API来创建   适当的空Blob,调用setBinaryStream是合法的   空Blob

所以我不得不:

Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[0]); 
blob.setBinaryStream(1);