jpa高階二級快取
1.主鍵的分類
1.自然主鍵:沒有實際意義的主鍵
2.**主鍵
主鍵的特徵:非空且唯一的
@generatedvalue 預設為auto
主鍵的生成策略:jap標準的策略有四種 auto table sequence identity
auto:自動選擇乙個最適合底層資料庫的主鍵生成策略支援mysql此種主鍵生成策略比較常用
table:表的生成策略 額外建立一張表來維護主鍵
sequence:通過資料庫的序列產生主鍵, mysql 不支援
identity:主鍵由資料庫生成, 採用資料庫自增長, oracle不支援這種方式
2.jpa的狀態:
1.乙個實體幾個jpa維護的時候 這個實體在不同的時期狀態不一樣
2. 1臨時(瞬間)剛剛建立出來沒有和jpa發生關係
2.持久(託管)已經和jpa發生關係
3.(游離)脫離entitymanager的管理已經被持久化 不存在entitymanager裡面
4.刪除 remove狀態
3.髒資料更新
1.髒資料的更新定義:乙個持久化狀態的資料,如果修改非主鍵的之後,在conmit的時候,自動去傳送update語句更新
2.乙個持久化的資料如果改變了乙個主鍵的值會報n-n的錯誤 持久化的資料不能更改主鍵的值
列**:
4.實體類的定義規則
1.不要使用final修飾
2.要使用基本資料型別對應包裝類
5.域物件之間關係
1.依賴關係(乙個類去依賴另外乙個類)
2.關聯關係(乙個類和另外乙個類他們之間是有關係的)
3.組合關係(整體和部分的關係不可以分開存在)
4.聚合關係(整體和部分的關係可以分開存在)
6.jpa單向多對一
外來鍵生成:@manytoone配置外來鍵
@manytoone(fetch = fechtype.lazy)懶載入
@manytoone(fetch = fechtype.eager)迫切載入
懶載入: 在查詢資料的時候如果使用的是懶載入那麼他只會根據你的需求查出你要的資料
迫切載入: 在查詢資料的時候如果為迫切載入那麼他江湖把跟他有所關係的外來鍵表都查詢出來
7.快取
domain類的二級快取的配置:@cacheable(true)配置在實體類上面
peisistence.xml配置:
pom.xml配置:導包
快取的作用:利用空間換取時間
一級快取的命中條件:同乙個entitymanage 同乙個entitymanager同乙個人oid
二級快取的命中條件:同乙個entitymanage 不同的entitymanager同乙個人oid
domain類的二級快取:同乙個entitymanage***ctory,不同乙個entitymanager,oid相同
oid:object id
如果是用entitymanager1.createquery(sql).setparameter(1, 1);語句來查詢想要存進快取裡面需要在查詢語句下輸入 query1.sethint(queryhints.hint_cacheable,true);
jpa持久化及快取
1 spring jpa持久化 由entitymanager 管理,對應乙個持久化上下文 一級快取 實體有不同的狀態 新建 託管 游離 移除狀 態 注意 a 如果spring沒開啟事務,通過findone 查詢到的實體,就會不在託管狀態下 對這個物件屬性的更改,不會同步到資料庫。b 如果spring...
JPA 主鍵生成和快取
id generatedvalue strategy generationtype.identity sequence auto table private long id 臨時,持久,刪除,游離 乙個持久化狀態的物件,如果被修改,就會在提交事務的時候被修改dentifier of an insta...
JPA學習筆記(14) 查詢快取
執行以下 string jpql from user u where u.id query query entitymanager.createquery jpql query.setparameter 1,1 user user user query.getsingleresult query e...