JPA 2次キャッシュ

4309 ワード

JPAステータス
1つのエンティティがJPAメンテナンスに渡されたとき、このエンティティの異なる時期の状態は異なる一時(瞬時)永続(管理)遊離(脱管)削除状態汚れデータが永続化状態のデータを更新し、プライマリ・キー以外の値を変更するとconmmit時にupdate文が自動的に送信され、最下位レベルがキャッシュによって操作されます.永続化状態のデータがある場合、プライマリ・キーの値を変更するとn to nのエラーが報告されます.
ドメインオブジェクト間の関係依存関係あるクラス別のクラス別のクラス別のクラス別のクラス別のクラス別のクラス別のクラス別のクラス別のクラス別のクラス従業員や部門などの関係があります-複数対1複数対複数対複数対複数対複数対1集約関係全体と部分関係、全体と部分は結合関係全体と部分の関係を分離することができます.全体と部分が別々に存在しない
ダーティデータ更新
永続状態オブジェクトトランザクション管理内で、元のデータ(プライマリ・キー以外)を変更すると、汚いデータが表示され、トランザクションがコミットされると自動的にupdate文を発行して最初のステップを変更します.entityManagerを取得し、トランザクションを開始します.entityManagerでオブジェクトを取得します.では、このオブジェクトは永続化されたオブジェクトです.このオブジェクトは1レベルのキャッシュに格納されます.JPAは現在のオブジェクトにスナップショットを用意します(このオブジェクトをバックアップしました).第3歩:トランザクションをコミットします.これは、スナップショットを現在のオブジェクトのデータと比較します.たとえば、変更する必要はありません.SQL(パフォーマンスが高くなります)を送信しません.JPAは、現在このデータが汚いデータであると考え、トランザクションがコミットされたときにデータベースの同期を行う(update SQL文を送信)
二次キャッシュ
  EntityManagerFactory     ,      ,         ,      ,        ---  Encache         

persistenceを追加します.xml構成情報

<property name="hibernate.cache.use_second_level_cache" value="true" />

<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />

<property name="hibernate.cache.use_query_cache" value="true" />

上に2次キャッシュスキャンを構成するポリシーを追加





<shared-cache-mode>ENABLE_SELECTIVEshared-cache-mode>

二次キャッシュクラス構成:ヒット条件:同じセッションファクトリ、異なるentityManager、OID同じ//sql//@Entity//@Cacheable(true)/public class Department
クエリー・キャッシュ
クエリー・キャッシュ:2次キャッシュ//1つのsql//ヒット条件に依存します:同じEntityManagerFactory、異なるentityManager、発行されたsql文は同じでなければなりません.クエリーの条件値も同じでなければなりません.
//1.クエリー・キャッシュにクエリー条件がある場合は、ヒット率が非常に低いため、クエリー・キャッシュを使用しないでください.クエリー・キャッシュ内のクエリーとは、jpql、sqlを使用したクエリーで、createQueryメソッドが呼び出されます.findメソッドはクエリー・キャッシュ//3を歩くのではありません.domainクラスの2次キャッシュの構成を行う