JPA永続オブジェクトの状態、キャッシュ、L2キャッシュ

オブジェクトの永続状態1JPA

1.1  一時的な状態(過渡):過渡状態

ただ、新しい文は、作成していなかったのEntityManager の関係を

永続的ではない、ないではEntityManager インチ オブジェクトは、一時的なオブジェクトになります

1.2  永続状態(永続):管理状況

そして、 EntityManagerの関係

永続化された、に追加するEntityManager レベルのキャッシュインクルードがマージを取り外し持続

@Test
     公共 ボイド testUpdateid()スロー例外{ 
        のEntityManagerのEntityManager = JpaUtil.getEntityManagerを(); 
        entityManager.getTransaction()(開始);. 

        ドメインOIDDomain = EntityManager.find(OIDDomain。クラス、1L)を; // 永続状態 
        Domain.setName ( "リトル17" );
         // キャッシュ
         // EntityManager.persist(ドメイン); // 永続状態
 // トランザクションコミット
        entityManager.getTransaction()(コミット);. 
        entityManager.closeを(); // フリーの状態 
    }

 

 

 

状態は永続オブジェクトの目的です。

1.3  自由な状態(デタッチ):デタッチ状態

それはに永続的ではなくなっているのEntityManager に。

この状態は、自由なオブジェクトのオブジェクトです。

1.4。  ステータスの削除(削除)を:からJPA いくつかの状態を開始しました

コールだけ entityManager.remove(ドメインオブジェクトメソッド

関連するオブジェクト ID 、およびEntityManagerの管理の下で、

計画が削除されている。しかし、トランザクションが実際に削除されてコミットします。

1.5。  ダーティデータ更新

トランザクション管理内のオブジェクトの永続的な状態は元のデータを変更した場合非キー、ダーティデータを表示されトランザクションがコミットされたときに自動的に発行、更新、変更するステートメントを。

 

 @Test 公共ボイドtestUpdateid()例外{スロー = JpaUtilのEntityManagerのEntityManager。getEntityManager(); )(開始entityManager.getTransaction(); OIDDomainドメイン= EntityManager.find(OIDDomain。クラス、1L); //永続状態Domain.setName ("リトル17"); //キャッシュ//entityManager.persist(Domain);//永続的な状態が//トランザクションコミットentityManager.getTransactionを())(コミット。; entityManager.close(); //フリーの状態}











 

 

1.5 実行フロー分析

JPAUtil GETのEntityManager、オープン情勢

EntityManagerのオブジェクトを取得し、オブジェクトは現在、永続オブジェクトであります

このオブジェクトは、内部キャッシュに配置されます

JPAは、現在のオブジェクトのスナップショットを準備することであろうこのオブジェクトがバックアップされています

第三段階:トランザクションをコミットします

これは、スナップショットになる 、今、このオブジェクトのためにあなたのデータを比較します

同じ場合は、必要が送信されていない変更しないように SQLを(パフォーマンスは高いです

時間が同じでない場合は、 JPAは、このデータがダーティなデータだと思います

それは、取引時の汚れになりますコミットし、それが同期するデータベース送信更新するSQL 文を

休止状態:更新は=名を設定t_iod?どこのid =?

オブジェクト間の関係2'domain

 

2.1。  依存関係

 

注入春、管理オブジェクト間の相互依存

 

コントローラのパフォーマンスレベルが依存するサービスのビジネス層、サービスはに依存しているダオの永続化層

 

2.2。  関係

 

アソシエーションによれば、多数一対一、多くの1つ、および多対多に分けることができます。 主にデータベースを指すクラスの関係

 

よるナビゲーション単方向および双方向関連団体に分類。

  人と同じように、彼は報われない愛を知りませんでした

  私はあなたあなたは私を持っているカップル、双方向

 

2.3。  集約関係(本質的または双方向多く多くの)

 

これは、関係の全体の一部を示し、全体の部分は、単独で分離することができます。

 

男の女対応する数の、この女性はもっと一人一人が自分のサークルを持っている、多分これゲイゲイがあります。

Paolu売春宿の朝飯前、男性は、一人で牽牛と妹を拾うことができて、次を続けることができます

 

2.4。  関係を組み合わせること本質的には、集約関係で多くの多くの双方向性、

 

オーダー

2.5多くのコード分析

@Entity 
@Table(名前= "t_product")
publicクラスの製品{
@Id
@GeneratedValue プライベートロングID プライベート文字列; プライベート文字列のアドレス@ManyToOne //FetchType.EAGER迫切加载@JoinColumn(名前= "dir_id")プライベートProductDirのがDIR ;






正しい言葉遣い:最初のマルチパーティを保存し、パーティを保存

 

 

 

HEの二次キャッシュ3

キャッシュは、時間のためのメモリを犠牲にしています

一级缓存就是同一个entitymanagerfactory 同一个entitymanager 同oid(默认的)

 

3.2.1. 添加二级缓存jar文件

pml配置这个导报

 

hibernate-release-4.3.8.Final\lib\optional\ehcache\3jar文件

 

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-ehcache</artifactId>
    <version>4.3.8.Final</version>
</dependency>

 

 

 

3.2.2. 搜索配置信息Cache

 

添加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" />

 

1.2. <properties>上面添加配置二级缓存扫描的策略

 

<!-- ALL:所有的实体类都被缓存 -->

 

<!-- NONE:所有的实体类都不被缓存. -->

 

<!-- ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存 -->

 

<!-- DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类 -->

 

<!-- UNSPECIFIED:默认值,JPA 产品默认值将被使用 -->

 

<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

 

1.3. domain类的二级缓存

 

二级缓存类配置:命中条件:同一个SessionFactory,不同的entityManager,OID相同

 

 

// @Entity

 

// @Cacheable(true)

 

// public class Department

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/13438145925xiaozheng/p/11241715.html