2017-03-07 16 views
0

擬似コードでいくつかのエンティティを使用するとします。Article { id, author, text, date }すべてのプロパティが遅延して初期化されています。私はリポジトリメソッドを持っています:MVCでのHibernate遅延プロパティ初期化のベストプラクティス?

@Transactional 
Article loadArticle(int id) { 
    return articeRepository.find(id); 
} 

これは異なるコントローラで使用されています。 PreviewControllerには、authordateが必要です。 ViewControllertextdateが必要です。 ブール値のパラメータをinitAuthor, initText, initDateからloadArticle()に渡すと、それぞれのプロパティでHibernate.initialize()と呼びますか?または、コントローラのメソッドに@Transactionalを移動する必要がありますか?怠惰な初期化を扱うベストプラクティスは何ですか?

答えて

2

パフォーマンスの高いデータアクセス層を目指す場合は、ユースケースごとに異なる種類のデータが必要です。

私が提案したかったのは、必要なデータだけを取り出す、さまざまなユースケースに対してさまざまな方法を使いたいということです。

これを行うには、複数の方法があります。それははっきりそれはだということを示して、私は後者を好む読み取り専用投影

を作成

  • に参加フェッチを持つエンティティの関係をフェッチ

    1. は、データを変更するのではなく、データを表示します。

      投影については、Spring Data JPAは基本的にインターフェイスを定義するためのすぐれたソリューションを備えています。

      Hibernate.initialize()などのエンティティリレーションの読み込みをトリガする場合は、実質的にデータベースクエリがトリガされます。 100個のエンティティを考えてみると、101個のクエリが実行されます。フェッチまたは読み取り専用の投影を使用します。

  • 関連する問題