1.ロード戦略:データを照会休止状態に言及するとき、どのようなメモリを使用してデータを書き込むための方法の一種。遅延読み込みと即時荷重:Hibernateはデータをロードする2つの方法を提供します。
データを照会するhiberanteのAPIの使用を参照する際にも遅延ロード、として知られている2遅延ロードは、すぐにメモリにデータを書き込めません。しかし、SQL文の実際の使用は、データのクエリデータへのデータまで発行されます。
3.インスタントロードは:APIデータのクエリを休止状態使用に言及する、SQLステートメントは、すぐにクエリデータが発行されます。そして、メモリデータを書き込みます。
ObjectNotFoundException:4.get即時荷重方式が使用されているデータをロードするために使用されるヌル,;遅延ロードメソッドを返し、存在しない場合、データが存在しない場合は、例外がスローされます。
試験方法を取得
@Test 公共 ボイドtestGet(){ セッションセッション = HibernateUtil.getSession()。 ブックブック =(書籍)session.get(書籍。クラス、1 ); System.out.println( "------------------" ); System.out.println(book.getName() + "---" + book.getAuthor()); HibernateUtil.close(); }
負荷試験方法
@Test 公共 ボイドtestLoad(){ セッションセッション = HibernateUtil.getSession()。 ブックブック =(書籍)たSession.load(書籍。クラス、8 ); System.out.println( "------------------" ); System.out.println(book.getName() + "---" + book.getAuthor()); HibernateUtil.close(); }
5.リストは即時荷重であり、データが実際に使用されたときに反復処理遅延読み込みは、最初のプライマリキーは、n + 1つの送られた記事のSQL文の実行クエリIDデータによると、データがチェックアウト照会します。(質問1及びN + 1)
リスト試験方法
@Test 公共 ボイドtestlistという(){ セッションセッション = HibernateUtil.getSession(); //は、クラス名からすべての書籍を照会するHQLのステートメントを使用した後に書かれている リスト<書籍>リスト= session.createQuery(「帳から」)。リスト( ); のSystem.out.println( "------------------" ); System.out.printlnは(はlist.size()); HibernateUtil.close(); }
反復試験方法
@Test 公共 無効testIterate(){ セッションセッション = HibernateUtil.getSession(); //は、クラス名からすべての書籍を照会するHQLのステートメントを使用した後に書かれている のIterator <書籍>リスト= session.createQuery(「帳から」)。反復( ); のSystem.out.println( "------------------" ); 一方(list.hasNext()){ ブックB = list.next(); システム。 out.printlnを(b.getName() + "----" + b.getAuthor()); } HibernateUtil.close(); }
注:上記の試験方法は、SQL文をプリントアウトすることである------判断し、観察することにより、位置が遅延ローディングまたは即時荷重です。
6.マッピングファイル、ラベルは怠惰です:
デフォルトのクラスは遅延ロードされます
デフォルトのプロパティがロードされた即時です
プロキシを使用してmany_to_oneのデフォルトのプロキシブックがすぐに関連付けられているオブジェクトを照会しますとき、それがfalseの場合は、遅延ロードを実装し、見つけます。無プロキシなまけ
@Test 公共 ボイドtestManyToOne(){ セッションセッション = HibernateUtil.getSession()。 書籍B =(書籍)session.get(書籍。クラス、1 )。 System.out.println(b.getName() + "----" + b.getAuthor()); System.out.println( "===============" ); System.out.println(b.getCategory()のgetName()。)。 HibernateUtil.close(); }
ラベルのデフォルト怠惰なセットが遅延ロード、虚偽の表現の瞬間負荷、余分なスマートロードを使用して、真で設定し、メソッドを呼び出して、SQLステートメントに応じて、異なる実行します。クエリのサイズだけならば、問題がテーブルからSQL SELECT COUNT(XX)です。
@Test 公共 ボイドTESTSET(){ セッションセッション = HibernateUtil.getSession()。 カテゴリC1 =(カテゴリ)session.get(カテゴリ。クラス、1 )。 System.out.println(c1.getBooks()サイズ()。)。 System.out.println( "------------------" ); 用(ブックB:c1.getBooks()){ System.out.printlnは(b.getName() + "---" + b.getAuthor())。 } HibernateUtil.close()。 }
注意:遅延ロードは、同じセッションでは、セッションを閉じ、遅延ロードが動作しませんでなければなりません。
7.フェッチ戦略:クロール戦略の選択を使用することで、SQL文のクエリの種類、休止状態または参加採用、クエリの管理を指します。だから、典型的な戦略は、クロールクロールを選択して参加することでつかみます。
@Test 公共 ボイドtestSelect(){ セッションセッション = HibernateUtil.getSession()。 ブックブック =(書籍)session.get(書籍。クラス、1 ); System.out.println(book.getName() + "---" + book.getAuthor()+ "---" + book.getCategory()のgetName()。)。 HibernateUtil.close(); }
結果:
休止状態: 選択し 、id1_0_0_としてbook0_.id name2_0_0_としてbook0_.nameを、 book0_.author author3_0_0_、として price4_0_0_としてbook0_.price、 book0_.pubDateはpubDate5_0_0_として、 cid6_0_0_としてbook0_.cid から t_bookのbook0_ book0_.id =? 休止状態: 選択 id1_1_0_としてcategory0_.id、 name2_1_0_としてcategory0_.name から t_category category0_ category0_.id =?
<多対1名=「カテゴリ」欄=フェッチ「CID」=「参加」/>
結果
:休止状態 を選択し 、id1_0_0_としてbook0_.id name2_0_0_としてbook0_.name、 book0_.author author3_0_0_、として price4_0_0_としてbook0_.price、 pubDate5_0_0_としてbook0_.pubDateは、 、cid6_0_0_としてbook0_.cid id1_1_1_としてcategory1_.id、 name2_1_1_としてcategory1_.name t_bookのbook0_ 外側左参加 t_category category1_ book0_.cid上 = category1_.id どこ book0_.id =を?
注:使用している場合は、参加クロール、遅延ロード無効ながら、