日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
JPA2.0VsHibernate:緩存方法的差異(一)

【譯文】JPA(Java Persistence API)與Hibernate是兩個(gè)管理的持久性和對(duì)象關(guān)系映射ORM(object relational mapping)的Java EE和Java SE應(yīng)用的領(lǐng)先技術(shù)。開(kāi)源的Hibernate是一個(gè)輕量級(jí)和透明的框架,簡(jiǎn)化了數(shù)據(jù)庫(kù)表映射到持久化類(lèi)XML文件和生成的SQL腳本運(yùn)行時(shí)的ORM。而基于XML的JPA是則一個(gè)簡(jiǎn)單得多的ORM元數(shù)據(jù)注釋?zhuān)〈藗鹘y(tǒng)的XML映射文件,使開(kāi)發(fā)人員能夠通過(guò)Java應(yīng)用程序注解或XML描述對(duì)象關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中。(編輯特別推薦專(zhuān)題:Hibernate應(yīng)用開(kāi)發(fā)教程)

在城子河等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷(xiāo),外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),城子河網(wǎng)站建設(shè)費(fèi)用合理。

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

作為JPA Provider中***大的Hibernate通過(guò)Hibernate Annotation和Hibernate EntityManager庫(kù)實(shí)施JPA。Hibernate EntityManager庫(kù)是JPA的完整實(shí)現(xiàn),它遵循的是JPA持久化特征,而Hibernate Annotation是除了標(biāo)準(zhǔn)化的JPA部分特定于Hibernate,它遵循自由化特征。Hibernate 從3.2開(kāi)始,就開(kāi)始兼容JPA。Hibernate3.2獲得了Sun TCK的JPA(Java Persistence API) 兼容認(rèn)證。2010年3月發(fā)布的Hibernate 3.5現(xiàn)在已經(jīng)完全兼容JPA 2.0。Hibernate Annotations、Hibernate EntityManager和Hibernate Envers已經(jīng)整合為JPA 2.0項(xiàng)目核心的部分。

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

JPA 2.0緩存原理

緩存對(duì)應(yīng)用程序性能和數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的優(yōu)化是必不可少的。通過(guò)存儲(chǔ)所需服務(wù)請(qǐng)求的數(shù)據(jù),減少訪(fǎng)問(wèn)緩存從數(shù)據(jù)庫(kù)調(diào)用數(shù)據(jù)的時(shí)間。JPA 2.0支持兩個(gè)級(jí)別的緩存,JPA的一級(jí)緩存(L1)和JPA的二級(jí)緩存(L2)。

JPA的1級(jí)緩存

一個(gè)JPA entity manager使用的持久化上下文管理的框架。在持久性方面,與各自的entity manager作為***級(jí)緩存。在任何一個(gè)持久化對(duì)象的框架內(nèi),將一個(gè)entity manager只有一個(gè)點(diǎn)的對(duì)象映射到數(shù)據(jù)庫(kù)中特定的實(shí)例。當(dāng)另一個(gè)用戶(hù)不同的持久化對(duì)象,JPA圈定持久性對(duì)象的范圍,以減少訪(fǎng)問(wèn)的時(shí)間。

持久性對(duì)象可以在任何程序執(zhí)行的過(guò)程中。在程序執(zhí)行的過(guò)程中,當(dāng)一個(gè)用戶(hù)在多個(gè)持久化對(duì)象之間來(lái)回調(diào)用,程序結(jié)束后馬上跳出。堅(jiān)持在一個(gè)不同的持久化對(duì)象之間進(jìn)行獨(dú)立實(shí)體的變化,而合并操作是在entity manager使用。

下面是一個(gè)例子:

 
 
 
 
  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.  

擴(kuò)大一下范圍,在多個(gè)持久化對(duì)象之間來(lái)回調(diào)用,因此對(duì)實(shí)體集并不是脫離,他們依然管理。擴(kuò)展的范圍適合應(yīng)用場(chǎng)合在用戶(hù)跨越多個(gè)請(qǐng)求。

下面是一個(gè)擴(kuò)大范圍的例子:

 
 
 
 
  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.  

然而,擴(kuò)大使用范圍,緩存的內(nèi)存消耗需要進(jìn)行評(píng)估,是利用緩存調(diào)用消耗少還是直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)方便。圖1顯示JPA 1級(jí)緩存。

JPA Level 1 (L1) Cache

#p#

JPA 2.0的二級(jí)緩存

二級(jí)緩存被引進(jìn)的JPA 2.0版本。JPA提供了基本的緩存操作的緩存API,而2級(jí)緩存共享狀態(tài)的實(shí)體跨越不同的持久化對(duì)象。 2級(jí)緩存的持久化對(duì)象的基礎(chǔ),這是高度透明的應(yīng)用程序。圖2顯示了JPA 2.0級(jí)緩存。

 
JPA Level 2 (L2) Cache

二級(jí)高速緩存通常是用來(lái)提高性能。但是,使用緩存可能會(huì)導(dǎo)致提取“陳舊”數(shù)據(jù),因此您可以選擇禁用緩存。

 
 
 
 
  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還提供了允許您刷新或繞過(guò)使用查詢(xún)提示,兩個(gè)實(shí)例:CacheRetrieveMode和CacheStoreMode定義緩存。您使用CacheRetrieveMode讀取緩存數(shù)據(jù):

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

繞過(guò)緩存,您將直接從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。

您使用CacheStoreMode插入或更新到緩存中,在讀取數(shù)據(jù)時(shí)從數(shù)據(jù)庫(kù)中調(diào)取實(shí)體數(shù)據(jù),如下:

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

當(dāng)CacheStoreMode不會(huì)強(qiáng)制一個(gè)已經(jīng)緩存的項(xiàng)目時(shí),從數(shù)據(jù)庫(kù)中讀取刷新的數(shù)據(jù)。

在刷新、插入或更新到緩存讀取數(shù)據(jù)時(shí),將強(qiáng)制從數(shù)據(jù)庫(kù)中讀取項(xiàng)目緩存的刷新。

當(dāng)二級(jí)緩存被啟用,***次提取持久性提供的程序?qū)ふ以诔志没瘜?duì)象的實(shí)體。如果它不容易找到他們,而不是發(fā)送查詢(xún)到數(shù)據(jù)庫(kù)緩存中。

這里是JPA的二級(jí)緩存優(yōu)點(diǎn)和缺點(diǎn):

優(yōu)點(diǎn):

◆避免了已經(jīng)加載對(duì)象的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)

◆對(duì)于頻繁訪(fǎng)問(wèn)的未修改的對(duì)象讀取更快

缺點(diǎn):

◆內(nèi)存消耗大量的對(duì)象

◆更新陳舊的數(shù)據(jù)對(duì)象

◆需要對(duì)可擴(kuò)展性差的對(duì)象進(jìn)行頻繁更新

◆增加并發(fā)代碼拼寫(xiě)

二級(jí)緩存***是經(jīng)常閱讀經(jīng)常修改的數(shù)據(jù),而不是至關(guān)重要的。

原文名稱(chēng):JPA 2.0 Cache Vs. Hibernate Cache: Differences in Approach

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

原文作者:Sangeetha S Nitin KL

【譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請(qǐng)注明原文出處、作者及譯稿和譯者!】

【編輯推薦】

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

標(biāo)題名稱(chēng):JPA2.0VsHibernate:緩存方法的差異(一)
當(dāng)前鏈接:http://www.5511xx.com/article/cogsjpp.html