0

Hibernate 4.3.5 API 経由でブロブを作成しようとしています。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 に設定されています (1 バイト配列が createBlob 引数として使用されているためですか?)。次の setBinaryStream(1) は例外をスローします。

私は何か間違ったことをしていますか、それともこれは H2 の問題ですか?

4

1 に答える 1

0

役に立つと思う人のために答えを投稿してください:

どうやらここで言われたように

何らかの理由で、Hibernate には適切な空の Blob を作成するための API がないようであり、空の Blob で setBinaryStream を呼び出すことのみが合法です。

だから私はしなければならなかった:

Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(new byte[0]); 
blob.setBinaryStream(1); 
于 2016-01-09T14:39:16.983 に答える