0

エンティティAには、2 つの単方向で遅延した 1 対 1 の関係がBあります (つまり、逆の関係はありません)。

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "first_b_id")
private B firstB;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
@JoinColumn(name = "second_b_id")
private B secondB;

遅延読み込みは正常に機能します。しかし、私が呼び出すと

myA.getSecondB()

SQLログは、Hibernateが次のようなものを発行することを示しています

select * from B where id in (value1, value2)

したがって、リレーションシップは遅延して処理されますが、すべて一度に読み込まれます。これについての説明と回避策は何ですか?

ああ、なぜそんなに関係があるのですか...Bエンティティは LOB です。1 つは 5 MB 以上のオリジナルで、もう 1 つは 200 KB の「プレビュー」です。もちろん、絶対に必要な場合にのみオリジナルをロードしたいと思います。

4

1 に答える 1

1

説明はおそらく、クラス B (または構成プロパティを使用するすべてのエンティティ)に対してバッチ フェッチを有効にしたことです。hibernate.default_batch_fetch_size

于 2012-12-08T19:09:16.443 に答える