Blob.setBinaryStream(1) 为参数 "length" [90008-190] 抛出无效值“1”
Blob.setBinaryStream(1) throws Invalid value "1" for parameter "length" [90008-190]
我正在尝试通过 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)
并且在构造函数中将精度设置为 1(因为单字节数组用作 createBlob 参数?)。接下来 setBinaryStream(1) 抛出异常。
是我做错了什么还是这个H2问题?
好的,将答案发布给认为有用的人:
显然和我一样 told here:
For some reason Hibernate does not seem to have an API to create a
proper empty Blob and it is only legal to call setBinaryStream on an
empty Blob
所以我不得不:
Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[0]);
blob.setBinaryStream(1);
我正在尝试通过 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)
并且在构造函数中将精度设置为 1(因为单字节数组用作 createBlob 参数?)。接下来 setBinaryStream(1) 抛出异常。
是我做错了什么还是这个H2问题?
好的,将答案发布给认为有用的人:
显然和我一样 told here:
For some reason Hibernate does not seem to have an API to create a proper empty Blob and it is only legal to call setBinaryStream on an empty Blob
所以我不得不:
Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[0]);
blob.setBinaryStream(1);