ハイバーアンテ3キャッシュ


ハイバーアンテ3一級キャッシュまとめ
1.             Sessionレベルのキャッシュは、セッション邦定と同じです。そのライフサイクルはセッションと同じです。Sessionが消滅し、それも同時に消える。一級キャッシュを管理していますが、一級キャッシュはキャンセルできません。二つの方法で管理します。clear()、evict()
2.             二つのセッションは一つのキャッシュを共有できません。sessionのライフサイクルの作成と消滅を伴うからです。
3.             Sessionキャッシュは、エンティティレベルのキャッシュであり、照会対象レベルのときにのみ使用されます。
HQLとSQLを使って属性レベルを照会するのは、一級キャッシュを使用しないのです。覚えてください!
4. iterateクエリはキャッシュを使用して、Idを照会するSQLとHQL文を発行しますが、エンティティを検索することはできません。
これは検索が終わったら、該当するエンティティをキャッシュに入れます。一部のエンティティクエリはキャッシュにあれば、キャッシュから検索しますが、それでもクエリIDのSQLとHQL文を送ります。キャッシュにデータベースで照会して、照会したエンティティが一つずつキャッシュに入れられないとN+1の問題が発生します。
5. List()とiterateクエリの違い:
iterateを使って、listはエンティティオブジェクト*N+1の問題を調べます。デフォルトでは、query.iterateクエリを使って、N+1の問題が発生することができます。
N+1とは、照会の際に、N+1条のsql文を発行した1:まず照会先IDリストを発行したsqlN:
IDリストからキャッシュに照会しますが、キャッシュに一致するデータが存在しない場合、IDによって該当するsql文リストリストとiterateの違いが発行されますか?
リストは毎回sql文を発行します。リストはキャッシュ中のデータを利用せずにキャッシュにデータを入れます。
iterate:デフォルトでは、iterateはキャッシュデータを利用しますが、キャッシュにデータが存在しないとN+1の問題が発生します。
6.Get()とロード、iterate方法はいずれも一級キャッシュを使用します。 
7.hibertate 3 session格納プロセスは以下の通りである。
       例えば、objectオブジェクト
       Session.save;
       この時はデータをデータベースに入れません。まずsessionキャッシュに入れます。データベースには該当記録がありません。session.flush()SQLとHQL文を送ったばかりです。データベースには該当記録があります。
       しかし、データベースはselectで調べられません。これはデータベースの事物レベルと関係があります。
 
       Session.begint Trransion().comit()
       物事を提出したら確認できます。Session.flush()文はなぜ書かないですか?comit()はflush()をデフォルトで呼び出します。
ハイバーアンテ3二級キャッシュまとめ
1.Hibernate 3の二級キャッシュとsessionレベルのキャッシュは同じで、エンティティオブジェクトのみをキャッシュし、属性レベルのクエリーはキャッシュしません。二級キャッシュのライフサイクルとsession Factoryのライフサイクルは同じです。session Factoryは二級キャッシュを管理できます。
2.session Factoryレベルのキャッシュは、手動で設定する必要があります。すべてのセッションはsession Factoryレベルのキャッシュを共有できます。(一般的には、あまり変化しないエンティティオブジェクトのいくつかをsession Factoryレベルのキャッシュに入れ、常に変化しないエンティティオブジェクトを置くのに適しています。)
3.Hiberante 3 2級キャッシュの配置と使用方法は以下の通りである。
1. ehcache.jarパッケージを導入して、Hbernate 3.2のETCファイルの下でehcache.xmlをプロジェクトSrcディレクトリの下にコピーしなければなりません。
(説明:ehcache.jarは第三の方法のキャッシュ製品です。hiberanteはそれを集積しただけです。他にも多くの第三者hibernateが集積したキャッシュ製品があります。関連している説明はhiberante 3開発マニュアルを見てください。ehcacheは分布応用をサポートしていません。分散式の需要があれば、分散式をサポートする2級キャッシュ製品に変えてください。hibertate 3開発マニュアルにも頭の説明があります。を選択します。設定方法は同じです。
4.Hibernate 3の2級キャッシュはデフォルトでは開いていますが、指定して開くこともできます。hibernature.cfg.xmlファイルでは、以下のように構成されています。
*hibernate.cfg.xmlファイルを修正し、2級キャッシュを開設する。
                     true
                     *二級キャッシュ製品の提供者を指定します。
<property name=”hibernate.cache.provider_クラス"> org.hibernate.cache.EhCacheProvider

それらのエンティティに二級キャッシュを使用させるには、ヒベルナ.cfg.xmlプロファイルに追加します。
<!—
このエンティティを二級キャッシュにする。 ファイルをエンティティにマッピングして構成することもできます。
<cache usage=「read-only」/>
-->
<class-cache class=”comp.zz.hibernate.lassT”usage=“read-only”/>
Read-onlyは一般的にこの策略を使っています。他のhibernate 3開発マニュアルにも詳しく紹介されています。
CacheModeはhibernate 3開発マニュアルの中でこのキーワードを検索して、一級キャッシュと二級キャッシュが交互に使う問題を見つけられます。