2

熱心なフェッチまたは遅延フェッチを行うようにモデルを構成する方法を理解しています。しかし、今回だけコレクションをeager-fetchするようにアプリケーションに指示するにはどうすればよいでしょうか?

言い換えると。get メソッドを持つ DAO があります。EntityDao.getEntity(entityId) このエンティティには、Childrenデフォルトで遅延ロードされるコレクションがあります。

dao-method がトランザクション対応であるとしましょう。

ほとんどの場合、子のないエンティティのみが必要ですが、時々、子を熱心に取得する必要があります。さて、どうすればそれについて行くでしょうか?

これがすべて正しいことを理解していれば、セッションはトランザクション内にのみ存在します。そのため、トランザクションが終了した後 (この場合は dao メソッドの後)、遅延フェッチは実行できなくなります。それでは、トランザクションをコードの上に置くか、トランザクション内でオブジェクトを熱心にフェッチできますか?

では、トランザクション内でこのeager-fetchを行うにはどうすればよいでしょうか?

私のオプションは何ですか?

4

2 に答える 2

1

詳細とについては、hibernate refer docの fetch profile 機能を使用する必要があります

于 2012-10-24T11:19:12.017 に答える
-1

dao でトランザクションを行うべきではありません。トランザクションは、ビジネス オペレーション全体にまたがる必要があります。これが、トランザクションを持つという意味です。

また、遅延読み込みを破棄します。セッションがまだ利用可能で、アクセス時に子がロードされている場合は、呼び出し元に対して透過的である必要があります。セッションを閉じると、遅延読み込みはできなくなり、エンティティにアクセスする必要があります。

于 2012-10-24T11:33:48.287 に答える