6

Image画像情報を保持するテーブルがあります。画像自体も保存したいです。だから私はすべきですか

1. Blob を同じイメージ テーブルに保存し、以下のように遅延フェッチします。

@Basic(optional = false, fetch = FetchType.LAZY)
@Lob
@Column(name = "IMAGE_BLOB", length=100000)    //This will generate MEDIUMBLOB
private byte[] imageBlob;

または

2. とのリレーションシップを持つ別のテーブルImageBlobを作成し、そのリレーションシップを遅延フェッチしますOneToOneImage

@OneToOne(cascade = CascadeType.ALL, mappedBy = "image", fetch=FetchType.LAZY)
private ImageBlob imageBlob;

これら 2 つの手法は、パフォーマンスの点で同じですか?

4

2 に答える 2

4

私の知る限り、最初のものは JPA プロバイダーとして Hibernate および EclipseLink では機能しません。LAZY はプロバイダーのヒントです。これらは、エラーや警告を報告することなく熱心にロードされます。

OneToOne アソシエーションは、クラス ウィービングが有効になっている場合にのみ遅延します。それ以外の場合も役に立ちません。

属性「entity」と「id」を持つLazyBlobと呼ばれる完全に別のテーブルを使用してそれを行い、このテーブルから遅延してロブをフェッチするユーティリティクラスを作成しました。

于 2012-11-07T08:57:18.867 に答える
3

どちらでも同じパフォーマンスが得られるはずですが、大きなブロブには 2 番目をお勧めします。

データベースは BLOB で扱いにくい場合があり、BLOB を独自のオブジェクトに分離することをお勧めします。これにより、ブロブをより細かく制御できます。

于 2012-04-12T12:47:39.700 に答える