0

休止状態の JPA を使用して Sybase DB から BLOB を読み取ろうとすると、次の例外が発生します。

実在物

@Lob
@Column(length=100000)    
private byte[] fileContent;

public byte[] getFileContent() {
    return fileContent;
}

public void setFileContent(byte[] fileContent) {
    this.fileContent = fileContent;
}

ioc.Registry メソッド com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String) はサポートされていないため、呼び出さないでください。ioc.Registry オペレーション トレース: ioc.Registry [ 1] Purchase_Request TapestryModule.RequestExceptionHandler でイベント 'activate' をトリガーしています呼び出してはいけません。org.apache.tapestry5.ioc.internal.OperationException: メソッド com.sybase.jdbc3.jdbc.SybResultSet.getBlob(String) はサポートされていないため、呼び出してはなりません。

BLOB をバイナリ データにマッピングして読み書きする方法の例へのリンクを提供する次の休止状態のスレッドに出くわしましたが、リンクは無効になっています。

スレッド https://forum.hibernate.org/viewtopic.php?f=1&t=936553

リンク切れ http://www.hibernate.org/73.html

誰かがこれを行う方法を説明する例または記事を提供できるかどうか疑問に思っていますか?

アップデート

この問題の概要を示す次の JIRA の問題を見つけました https://issues.jboss.org/browse/JBPAPP-2867

Laura は、「この問題の回避策は、Sybase の text 型と image 型にマップされるユーザー定義型を作成することです」と主張しています。

ユーザー定義型の作成に精通している人はいますか?

4

1 に答える 1

0

マッピングでバイト配列の代わりにjava.sql.Blobを使用してみることができます。Hibernate.createBlob()関数を使用して、バイト配列、文字列、入力ストリームからblobを変換できます。これの利点は、遅延読み込みです(休止状態のセッションが開くまでのみ)。

そうしないと、メモリ内で大きなオブジェクトをロードすると、多くのヒープスペースが消費される可能性があります。

 private void setBlob(Blob blob) 
 {
    this.image = toByteArray(blob);
 }

 private Blob getBlob()
 {
   return Hibernate.createBlob(this.image);
 }
于 2012-04-13T14:08:45.757 に答える