[JPA] JPA Study 3
@Validエラーが発生した場合、結果値をどのように表示するか→後で適用
エンティティの変更後にAPI仕様が変更されると問題になります.(@NotEmptyをnameに割り当て、name→usernameに変更するとapi specが変わります.)→解決:DTOを作成します.
commandとqueryを別々に設計し、メンテナンス性を向上
主にクエリーでパフォーマンスの問題が発生します.
ページ分けの際、ユーザーが注文した商品を見たとき、注文した商品が2つであれば、2つのクエリーがありますが、これはどうやって解決しますか?
Javaが変数関数(String.s)の場合、関数(s 1、s 2、s 3)はこのように複数のString値を割り当てることができます(私が知りたいのは)
オーダークエリv 2の問題は、N+1でクエリされることである.
つまり、上記のケースでは5回のクエリー(注文が何万回あったら、、?)
(復習)fetch join,N+1次クエリはjoin fetchを介してDBから1つの部屋クエリにインポートされると,これらは永続性コンテキストに保存され,クエリは失敗せず,ここからインポートすればよい.
受注照会v 4
return em.createQuery(
"select new jpabook.jpashop.repository.OrderSimpleQueryDto(o.id, m.name, o.orderDate, o.status, d.address) " +
"from Order o" +
" join o.member m" +
" join o.delivery d", OrderSimpleQueryDto.class)
.getResultList();
}
Orderオブジェクトを入れないで、o.id,m.nameと名前を付けます.このようにoを入れると、識別子として認識されないからです.
-newコマンドを使用してJPQLの結果を直ちにDTOに変換
-注文照会v 4コードを見るだけでは再利用性がない.最悪のメンテナンス(v 3よりもパフォーマンスが優れているのみ、selectインポート時に最適化が少ない)
クエリー
エンティティを問い合せて返す:V 1
エンティティクエリ後のDTO:V 2への変換
プリフェッチ結合を使用したクエリー数の最適化:V 3
コレクションのページングと突破限界:V 3.1
ダイレクトクエリ
直接JPAからDTO:V 4を問い合わせる
コレクションクエリーの最適化-複数の関係コレクションのペアINセグメントを使用してメモリ内で事前にクエリーを行い、最適化:V 5
フラットデータの最適化:JOIN結果をアプリケーションに直接変換するために必要な外観:V 6
体得:開発時に性能最適化vsコードの複雑さを考慮すべきである.
以降、ユーザが多い場合はRedisキャッシュが使用されますが、この場合はエンティティをキャッシュするのではなく、DTOをキャッシュする必要があります.
OSIVポリシーは、トランザクションの開始と同様に、最初のデータベース接続からAPI応答の終了まで、永続性コンテキストとのデータベース接続を常に維持します→したがって、ロードを遅延させることができます.
OSIVをオフにしますか?
Reference
この問題について([JPA] JPA Study 3), 我々は、より多くの情報をここで見つけました https://velog.io/@shwncho/JPA-JPA-Study-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol