成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JPA 2.0 Vs Hibernate:緩存方法的差異(一)

原創
開發 后端
JPA 2.0 Vs Hibernate:緩存方法的差異,本文為developer.com的Java頻道7月12日的頭條新聞的第一部分:為我們講述JPA 2.0(Java Persistence API)的緩存方法。

【51CTO譯文】JPA(Java Persistence API)與Hibernate是兩個管理的持久性和對象關系映射ORM(object relational mapping)的Java EE和Java SE應用的領先技術。開源的Hibernate是一個輕量級和透明的框架,簡化了數據庫表映射到持久化類XML文件和生成的SQL腳本運行時的ORM。而基于XML的JPA是則一個簡單得多的ORM元數據注釋,取代了傳統的XML映射文件,使開發人員能夠通過Java應用程序注解或XML描述對象關系表的映射關系,并將運行期的實體對象持久化到數據庫中。(51CTO編輯特別推薦專題:Hibernate應用開發教程

EJB 3.0軟件專家組在2009年11月發布了***版本JPA 2.0(JSR 317),改進了JPA 1.0版本中的一些基本功能:ORM功能、實體管理功能、查詢接口和Java持久化查詢語言(JPQL)。

作為JPA Provider中***大的Hibernate通過Hibernate Annotation和Hibernate EntityManager庫實施JPA。Hibernate EntityManager庫是JPA的完整實現,它遵循的是JPA持久化特征,而Hibernate Annotation是除了標準化的JPA部分特定于Hibernate,它遵循自由化特征。Hibernate 從3.2開始,就開始兼容JPA。Hibernate3.2獲得了Sun TCK的JPA(Java Persistence API) 兼容認證。2010年3月發布的Hibernate 3.5現在已經完全兼容JPA 2.0。Hibernate Annotations、Hibernate EntityManager和Hibernate Envers已經整合為JPA 2.0項目核心的部分。

是什么讓這兩個不同的ORM框架兼容的呢?在這篇文章中,我們將對JPA 2.0和Hibernate的緩存方法進行一個簡單的比較。首先,我們先介紹一下JPA 2.0緩存原理。

JPA 2.0緩存原理

緩存對應用程序性能和數據庫訪問的優化是必不可少的。通過存儲所需服務請求的數據,減少訪問緩存從數據庫調用數據的時間。JPA 2.0支持兩個級別的緩存,JPA的一級緩存(L1)和JPA的二級緩存(L2)。

JPA的1級緩存

一個JPA entity manager使用的持久化上下文管理的框架。在持久性方面,與各自的entity manager作為***級緩存。在任何一個持久化對象的框架內,將一個entity manager只有一個點的對象映射到數據庫中特定的實例。當另一個用戶不同的持久化對象,JPA圈定持久性對象的范圍,以減少訪問的時間。

持久性對象可以在任何程序執行的過程中。在程序執行的過程中,當一個用戶在多個持久化對象之間來回調用,程序結束后馬上跳出。堅持在一個不同的持久化對象之間進行獨立實體的變化,而合并操作是在entity manager使用。

下面是一個例子:

  1. @Stateless  
  2. public EmpDetailsBean implements EmpDetails {  
  3. @PersistenceContext  
  4. EntityManager entityManager;  
  5.  
  6. public Employee addEmployee(String empId, String empName, String empUni) {  
  7. Employee employee = new Employee(empId, empName, empUnit);  
  8. entityManager.persist(employee); //employee is managed entity  
  9. return employee; //employee is detached entity  
  10. }  
  11.  
  12. public Employee updateEmployee(Employee employee) {  
  13. //employee is detached entity, employee1 is managed entity  
  14. Employee employee1 = entityManager.merge(employee);  
  15. return employee;  
  16. }  
  17. }  
  18.  

擴大一下范圍,在多個持久化對象之間來回調用,因此對實體集并不是脫離,他們依然管理。擴展的范圍適合應用場合在用戶跨越多個請求。

下面是一個擴大范圍的例子:

  1. @Stateful  
  2. public EmpDetailsBean implements EmpDetails {  
  3. @PersistenceContext(type=PersistenceContextType.EXTENDED)  
  4. EntityManager entityManager;  
  5. //Cached employee  
  6. private Employee employee;  
  7.  
  8. public void addEmployee(String empId, String empName, String empUnit) {  
  9. employee = new Employee(empId, empName, empUnit);  
  10. entityManager.persist(employee); //employee is managed entity  
  11. }  
  12.  
  13. public void updateEmployee(String empUnit) {  
  14. employee.setUnit(empUnit); //employee is managed entity  
  15. }  
  16. }  
  17.  

然而,擴大使用范圍,緩存的內存消耗需要進行評估,是利用緩存調用消耗少還是直接訪問數據庫方便。圖1顯示JPA 1級緩存。

Level1Cache
JPA Level 1 (L1) Cache

#p#

JPA 2.0的二級緩存

二級緩存被引進的JPA 2.0版本。JPA提供了基本的緩存操作的緩存API,而2級緩存共享狀態的實體跨越不同的持久化對象。 2級緩存的持久化對象的基礎,這是高度透明的應用程序。圖2顯示了JPA 2.0級緩存。

Level2Cache 
JPA Level 2 (L2) Cache

二級高速緩存通常是用來提高性能。但是,使用緩存可能會導致提取“陳舊”數據,因此您可以選擇禁用緩存。

  1. public interface Cache {  
  2. /**  
  3. * Whether the cache contains data for the given entity.  
  4. */  
  5. public boolean contains(Class cls, Object primaryKey);  
  6.  
  7. /**  
  8. * Remove the data for the given entity from the cache.  
  9. */  
  10. public void evict(Class cls, Object primaryKey);  
  11.  
  12. /**  
  13. * Remove the data for entities of the specified class (and its  
  14. * subclasses) from the cache.  
  15. */  
  16. public void evict(Class cls);  
  17.  
  18. /**  
  19. * Clear the cache.  
  20. */  
  21. public void evictAll();  
  22. }  
  23.  

JPA的2.0緩存API還提供了允許您刷新或繞過使用查詢提示,兩個實例:CacheRetrieveMode和CacheStoreMode定義緩存。您使用CacheRetrieveMode讀取緩存數據:

  1. javax.persistence.cache.retrieveMode: CacheRetrieveMode  
  2.  

繞過緩存,您將直接從數據庫中獲取數據。

您使用CacheStoreMode插入或更新到緩存中,在讀取數據時從數據庫中調取實體數據,如下:

  1. javax.persistence.cache.storeMode: CacheStoreMode  
  2.  

當CacheStoreMode不會強制一個已經緩存的項目時,從數據庫中讀取刷新的數據。

在刷新、插入或更新到緩存讀取數據時,將強制從數據庫中讀取項目緩存的刷新。

當二級緩存被啟用,***次提取持久性提供的程序將尋找在持久化對象的實體。如果它不容易找到他們,而不是發送查詢到數據庫緩存中。

這里是JPA的二級緩存優點和缺點:

優點:

◆避免了已經加載對象的數據庫訪問

◆對于頻繁訪問的未修改的對象讀取更快

缺點:

◆內存消耗大量的對象

◆更新陳舊的數據對象

◆需要對可擴展性差的對象進行頻繁更新

◆增加并發代碼拼寫

二級緩存***是經常閱讀經常修改的數據,而不是至關重要的。

原文名稱:JPA 2.0 Cache Vs. Hibernate Cache: Differences in Approach

原文地址:http://www.developer.com/java/

原文作者:Sangeetha S Nitin KL

【51CTO譯稿,非經授權謝絕轉載,合作媒體轉載請注明原文出處、作者及51CTO譯稿和譯者!】

【編輯推薦】

  1. JPA 2.0 Vs Hibernate:緩存方法的差異(二)
  2. JPA與Hibernate的優缺點
  3. JPA重整ORM山河
  4. 淺析Hibernate EntityManager
  5. 講解Hibernate核心API
  6. 簡述Hibernate ORM是什么

 

責任編輯:佚名 來源: 51CTO獨家譯文
相關推薦

2010-07-13 16:20:18

JPA 2.0緩存Hibernate緩存Java EE

2009-06-01 12:11:31

hibernatejpa復合主鍵

2009-06-19 18:36:15

JPAHibernate

2009-06-17 15:52:23

Hibernate查詢

2012-02-03 11:31:33

HibernateJava

2021-10-06 23:31:45

HibernateJPASpring Data

2009-06-29 08:48:41

Hibernate緩存

2009-09-22 10:50:04

Hibernate c

2009-09-25 16:29:32

Hibernate一級

2021-07-28 09:00:00

編程語言Kotlin開發

2009-06-18 14:51:12

Hibernate緩存Hibernate

2009-06-17 15:43:03

Hibernate緩存

2009-09-23 17:03:08

Hibernate S

2009-09-25 13:51:13

Hibernate S

2009-09-25 10:25:54

Hibernate緩存

2009-09-23 09:37:07

Hibernate緩存

2009-06-18 13:42:48

Hibernate s

2009-06-02 11:25:22

HibernateJPA映射

2009-06-30 14:08:00

Hibernate緩存

2009-09-22 11:24:07

Hibernate查詢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 自拍第1页 | 欧美精品片 | 国产av毛片 | 欧美精品一二区 | 免费黄色录像视频 | 亚洲一区二区在线视频 | 免费黄色网址视频 | 国产在线网站 | 午夜精品一区二区三区在线视频 | 日韩免费毛片视频 | 亚洲成人午夜电影 | 草樱av| 国产a区 | 一级午夜aaa免费看三区 | japanhd成人| 伊人激情网 | 国产美女视频一区 | 涩在线| 欧美性区 | 日韩av在线不卡 | 亚洲一区二区三区福利 | 国产日韩视频 | 国产精品日本一区二区在线播放 | 日本精品视频 | 久久久久亚洲精品 | 国产乱码精品一区二区三区忘忧草 | 91高清视频在线观看 | 午夜成人在线视频 | 日韩精品在线视频免费观看 | 亚洲最大的成人网 | 91免费在线 | 夜夜操天天操 | 日本成人片在线观看 | 成人动漫视频网站 | 成人av一区二区三区 | 精品国产99 | 色久电影| 国产成人精品久久二区二区 | 久久99国产精一区二区三区 | 亚洲一区中文 | 国产一区二区久久 |