オブジェクトの永続状態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\3个jar文件
<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