




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、HIBERNATE面試常見問題2011-04-09 22:27:43|分類:面試集錦|標(biāo)簽:hibernate |字號大中小訂閱Hibernate的檢索方式導(dǎo)航對象圖檢索OID檢索HQL檢索QBC檢索本地SQL 檢索Forward 與 Global-Forward 的區(qū)別答:Forward是根據(jù)Action return的值找到對應(yīng)的JSP頁。當(dāng)多個(gè) Action共同return同一個(gè)值時(shí),可將這個(gè)Forward元素寫在 Global-Forward 中。3、在Hibernate應(yīng)用中Java對象的狀態(tài)有哪些?1臨時(shí)狀態(tài)(transient):剛剛用new語句創(chuàng)建,還沒有被持久化, 不處于Se
2、ssion的緩存中。處于臨時(shí)狀態(tài)的Java對象被稱為臨時(shí)對象 2持久化狀態(tài)(persistent):已經(jīng)被持久化,加入到Session的緩存 中。處于持久化狀態(tài)的Java對象被稱為持久化對象。3游離狀態(tài)(detached):已經(jīng)被持久化,但不再處于Session的緩存 中。處于游離狀態(tài)的Java對象被稱為游離對象。4、三種檢索策略是什么,分別適用于哪種場合?立即檢索-優(yōu)點(diǎn):對應(yīng)用程序完全透明,缺點(diǎn):select語句數(shù)目多。適用:類級 別。延遲檢索一優(yōu)點(diǎn):由應(yīng)用程序決定加載哪些對象,可以避免執(zhí)行多余的select語 句以及避免加載不需要訪問的對象,節(jié)省內(nèi)存空間,提高檢索效率。缺點(diǎn):應(yīng)用程序如果要
3、訪問游離態(tài)的代理類實(shí)例,必須保證它在持久 化時(shí)已經(jīng)被初始化。適用:一對多或多對多關(guān)聯(lián)。應(yīng)用程序不需要立即訪問或者根本不會 訪問的對象。迫切左外連接檢索:優(yōu)點(diǎn):對應(yīng)用程序完全透明,不管對象處于持久化狀態(tài)還是游離狀態(tài), 應(yīng)用程序都可以方便的從一個(gè)對象導(dǎo)航到另一個(gè)與它相關(guān)聯(lián)的對象 使 用了外連接,select語句數(shù)目少。缺點(diǎn):可能會加載程序不許要訪問的對象。復(fù)雜的數(shù)據(jù)庫表連接形象檢 索性能。適用:一對一或多對一關(guān)聯(lián)。應(yīng)用程序需要立即訪問的對象。數(shù)據(jù)庫系 統(tǒng)具有良好的表連接性能。5、ORM解決的不匹配問題(域模型與關(guān)系模型之間存在的不匹配) 域模型是面向?qū)ο蟮?,關(guān)系模型是面向關(guān)系的。域模型中有繼承關(guān)系
4、,關(guān)系模型中不能直接表示繼承關(guān)系。域模型中有多對多關(guān)聯(lián)關(guān)系,關(guān)系模型中通過連接表來表示多對多關(guān)聯(lián) 關(guān)系。域模型中有雙向關(guān)聯(lián)關(guān)系,關(guān)系模型中只有單向參照關(guān)系,而且總是 many參照one方。域模型提倡精粒度模型,關(guān)系模型提倡粗粒度模型。6、映射繼承關(guān)系的三種方式?繼承關(guān)系樹的每個(gè)具體類對應(yīng)一張表:在具體類對應(yīng)的表中,不 僅包含和具體類屬性對應(yīng)的字段還包括與具體類的父類屬性對應(yīng)的字 段。繼承關(guān)系樹的根類對應(yīng)一張表:在根類對應(yīng)的表中,不僅包括根 類屬性對應(yīng)的字段,還包括根類的所有子類屬性對應(yīng)的字段。繼承關(guān)系樹中的每個(gè)類對應(yīng)一張表,每個(gè)表中只包括和這個(gè)類本 身屬,性對應(yīng)的字段,子類的表參照父類對應(yīng)的表
5、。7、Session的find()方法以及Query接口的區(qū)別。答案Session類的find()方法以及Query接口都支持HQL檢索方式。這兩者的區(qū)別在于,前者只是執(zhí)行一些簡單HQL查詢語句的便捷方法, 它不具有動態(tài)綁定參數(shù)的功能,而且在Hibernate3.x版本中,已經(jīng)淘 汰了 find()方法;而Query接口才是真正的HQL查詢接口,它提供了 以上列出的各種查詢功能。hibernate 的配置文件(perties)中hibernate.show_sql=true/flase在開發(fā)階和測試段應(yīng)設(shè)置為()在發(fā)布階段應(yīng)設(shè)置為();truefalse映射一對多雙向關(guān)聯(lián)關(guān)系中設(shè)置SET元素:
6、請寫出級聯(lián)保存和更新、級聯(lián)刪除應(yīng)在set元素中需要設(shè)置那些子元 素?(標(biāo)明關(guān)系、避面重復(fù)執(zhí)行多余SQL語句)Name cascade key column one-to-many inverselist要的實(shí)現(xiàn)類有那些?并按照存儲結(jié)構(gòu)、機(jī)制簡單的說一下。LinkedList、 ArryList、 Vector。LinkedList采用鏈表數(shù)據(jù)結(jié)構(gòu)、ArryList代表大小可變的數(shù)組。Vector與ArryList功能比較相似,區(qū)別在于Vector采用同步、 ArryList沒有采用。11:以下哪個(gè)不是Hibernate的檢索方式:A、導(dǎo)航對象圖檢索B、OID檢索 C、ORM檢索D、QBC檢索E
7、、本地SQL檢索F、HQL檢索持久化類的類名是Customer.java,寫出相應(yīng)的映射文件名。答案:Customer.hbm.xml繼承的三種方式繼承關(guān)系樹的每個(gè)具體類對應(yīng)一張表:在具體類對應(yīng)的表中,不 僅包含和具體類屬性對應(yīng)的字段還包括與具體類的父類屬性對應(yīng)的字 段。繼承關(guān)系樹的根類對應(yīng)一張表:在根類對應(yīng)的表中,不僅包括根 類屬性對應(yīng)的字段,還包括根類的所有子類屬性對應(yīng)的字段。繼承關(guān)系樹中的每個(gè)類對應(yīng)一張表,每個(gè)表中只包括和這個(gè)類本 身屬性對應(yīng)的字段,子類的表參照父類對應(yīng)的表。Session接口是Hibernate應(yīng)用使用最廣泛的接口。Session也被 稱為持久化管理器,它提供了和持久化
8、相關(guān)的操作,如添加、更新、刪 除、加載和查詢對象。請簡述Session的特點(diǎn)有哪些?(1)不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享 同一個(gè)Session實(shí)例。Session實(shí)例是輕量級的,所謂輕量級是指它的創(chuàng)建和銷毀不需要 消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建或銷毀Session對 象,例如為每個(gè)客戶請求分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單 元分配單獨(dú)的Session實(shí)例。在Session中,每個(gè)數(shù)據(jù)庫操作都是在一個(gè)事務(wù)(transaction)中 進(jìn)行的,這樣就可以隔離開不同的操作(甚至包括只讀操作)。16、Hibernate中采用XML文件來配置對象-關(guān)
9、系映射的優(yōu)點(diǎn)有那些? 答案:Hibernate既不會滲透到上層域模型中,也不會滲透到下層數(shù)據(jù) 模型中。軟件開發(fā)人員可以獨(dú)立設(shè)計(jì)域模型,不必強(qiáng)迫遵守任何規(guī)范。 數(shù)據(jù)庫設(shè)計(jì)人員可以獨(dú)立設(shè)計(jì)數(shù)據(jù)模型,不必強(qiáng)迫遵守任何規(guī)范。對象 -關(guān)系映射不依賴于任何程序代碼,如果需要修改對象-關(guān)系映射,只需 修改XML文件,不需要修改任何程序,提高了軟件的靈活性,并且使維 護(hù)更加方便。17、敘述Session的緩存的作用(1)減少訪問數(shù)據(jù)庫的頻率。應(yīng)用程序從內(nèi)存中讀取持久化對象的速 度顯然比到數(shù)據(jù)庫中查詢數(shù)據(jù)的速度快多了,因此Session的緩存可以 提高數(shù)據(jù)訪問的性能。(2)保證緩存中的對象與數(shù)據(jù)庫中的相關(guān)記錄保
10、持同步。當(dāng)緩存中持 久化對象的狀態(tài)發(fā)生了變換,Session并不會立即執(zhí)行相關(guān)的SQL語 句,這使得Session能夠把幾條相關(guān)的SQL語句合并為一條SQL語句, 以便減少訪問數(shù)據(jù)庫的次數(shù),從而提高應(yīng)用程序的性能。18、多個(gè)事務(wù)并發(fā)運(yùn)行時(shí)的并發(fā)問題有哪些?第一類丟失更新;臟讀;虛讀;不可重復(fù)讀;第二類丟失更新;19、ORM解決的不匹配問題(域模型與關(guān)系模型之間存在的不匹配) 答:域模型是面向?qū)ο蟮模P(guān)系模型是面向關(guān)系的。域模型中有繼承 關(guān)系,關(guān)系模型中不能直接表示繼承關(guān)系。域模型中有多對多關(guān)聯(lián)關(guān) 系,關(guān)系模型中通過連接表來表示多對多關(guān)聯(lián)關(guān)系。域模型中有雙向關(guān) 聯(lián)關(guān)系,關(guān)系模型中只有單向參照關(guān)系
11、,而且總是many參照one方。域模型提倡精粒度模型,關(guān)系模型提倡粗粒度模型。20、session的清理和清空有什么區(qū)別?session清理緩存是指按照緩存中對象的狀態(tài)的變化來同步更新數(shù)據(jù) 庫;清空是session關(guān)閉;21 Hibernate工作原理及為什么要用?原理:讀取并解析配置文件讀取并解析映射信息,創(chuàng)建SessionFactory打開 Sesssion創(chuàng)建事務(wù)Transation持久化操作提交事務(wù)關(guān)閉 Session關(guān)閉 SesstionFactory為什么要用:對JDBC訪問數(shù)據(jù)庫的代碼做了封裝 大大簡化了數(shù)據(jù)訪問層繁瑣的 重復(fù)性代碼。Hibernate是一個(gè)基于JDBC的主流持久
12、化框架,是一個(gè)優(yōu)秀的ORM 實(shí)現(xiàn)。他很大程度的簡化DAO層的編碼工作hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明 性。hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級框架。映射的靈活性 很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。Hibernate是如何延遲加載?Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對象b)集合(Collection)Hibernate3提供了屬性的延遲加載功能當(dāng)Hibernate在查詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真 正對數(shù)據(jù)的操作時(shí),對象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省 了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)
13、器的性能。Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)痢 類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對 對象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過配 置文件中的 many-to-one、one-to-many、many-to-many、說下Hibernate的緩存機(jī)制1.內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應(yīng)用事物級緩存2.二級緩存:a)應(yīng)用及緩存b)分布式緩存條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非關(guān)鍵數(shù)據(jù)c)第三方緩存的實(shí)現(xiàn)25.Hibernate的查詢方式Sql、C
14、riteria,object comptositionHql:1、屬性查詢2、參數(shù)查詢、命名參數(shù)查詢3、關(guān)聯(lián)查詢4、分頁查詢5、統(tǒng)計(jì)函數(shù)26.如何優(yōu)化 Hibernate?使用雙向一對多關(guān)聯(lián),不使用單向一對多靈活使用單向一對多關(guān)聯(lián)不用一對一,用多對一取代配置對象緩存,不使用集合緩存對多集合使用Bag,多對多集合使用Set繼承類使用顯式多態(tài)表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存撐腰補(bǔ)充:Spring框架是一個(gè)分層架構(gòu),由7個(gè)定義良好的模塊組成o Spring模 塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方 式,如圖1所示。組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在
15、,或者與其 他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器 的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用 控制反轉(zhuǎn)(I0C)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用 程序代碼分開。Spring上下文:Spring上下文是一個(gè)配置文件,向Spring框 架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、 電子郵件、國際化、校驗(yàn)和調(diào)度功能。Spring AOP:通過配置管理特,性,Spring AOP模塊直接將面向 方面的編程功能集成到了 Spring框架中。所以,可以彳艮容易
16、地使 Spring框架管理的任何對象支持AOP。Spring AOP模塊為基于 Spring的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用Spring AOP,不用依賴EJB組件,就可以將聲明,性事務(wù)管理集成到應(yīng)用程序 中。Spring DAO: JDBC DAO抽象層提供了有意義的異常層次結(jié)構(gòu), 可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常 層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO的面向JDBC的異常遵從通用的 DAO異常層次結(jié)構(gòu)。Spring ORM: Spring框架插入了若干個(gè)ORM框架,從而提供 了
17、ORM的對象關(guān)系工具,其中包括JDO、Hibernate和iBatis SQL Mapo 所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。Spring Web模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊 之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持 與Jakarta Struts的集成。Web模塊還簡化了處理多部分請求以及將 請求參數(shù)綁定到域?qū)ο蟮墓ぷ?。Spring MVC框架:MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程 序的MVC實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容 納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iTe
18、xt和POI。Spring框架的功能可以用在任何J2EE服務(wù)器中,大多數(shù)功能也 適用于不受管理的環(huán)境。Spring的核心要點(diǎn)是 支持不綁定到特定 J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對象。毫無疑問,這樣的對象可以 在不同J2EE環(huán)境(Web或EJB)、獨(dú)立應(yīng)用程序、測試環(huán)境之間重用。控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象, 但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配 置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器(在Spring框架中 是IOC容器)負(fù)責(zé)將這些聯(lián)系在一起。在典型的IOC場景中,容器創(chuàng)建了所有對象,并設(shè)置必要的屬性 將它們連接在一起,決定什么時(shí)間調(diào)
19、用方法。下表列出了 IOC的一個(gè) 實(shí)現(xiàn)模式。Spring框架的IOC容器采用類型2和類型3實(shí)現(xiàn)。面向方面的編程面向方面的編程,即AOP,是一種編程技術(shù),它允許程序員對橫切 關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模 塊化。AOP的核心構(gòu)造是方面,它將那些影響多個(gè)類的行為封裝到可重 用的模塊中。AOP和IOC是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng) 用程序開發(fā)中的復(fù)雜問題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日 志記錄語句放在所有方法和Java類中才能實(shí)現(xiàn)日志功能。在AOP方 式中,可以反過來將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需 要日志的組件上。當(dāng)然,優(yōu)勢就是
20、Java類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用Spring AOP編寫的應(yīng)用程序代碼 是松散耦合的。AOP的功能完全集成到了 Spring事務(wù)管理、日志和其他各種特性 的上下文中。IOC容器Spring設(shè)計(jì)的核心是org.springframework.beans包,它的設(shè)計(jì) 目標(biāo)是與JavaBean組件一起使用。這個(gè)包通常不是由用戶直接使用, 而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級抽象是 BeanFactory接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過名稱創(chuàng)建和檢 索對象。BeanFactory也可以管理對象之間的關(guān)系。BeanFactory支持兩個(gè)對象模
21、型。單態(tài) 模型提供了具有特定名稱的對象的共享實(shí)例,可以在查詢 時(shí)對其進(jìn)行檢索。Singleton是默認(rèn)的也是最常用的對象模型。對于無 狀態(tài)服務(wù)對象很理想。原型 模型確保每次檢索都會創(chuàng)建單獨(dú)的對象。在每個(gè)用戶都需 要自己的對象時(shí),原型模型最適合。bean工廠的概念是Spring作為IOC容器的基礎(chǔ)。IOC將處理事 情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。正如我將在下一個(gè)示例中演示的 那樣,Spring框架使用JavaBean屬性和配置數(shù)據(jù)來指出必須設(shè)置的 依賴關(guān)系。BeanFactory 接口因?yàn)?org.springframework.beans.factory.BeanFactory 是一個(gè) 簡單
22、接口,所以可以針對各種底層存儲方法實(shí)現(xiàn)。最常用的 BeanFactory定義是XmlBeanFactory,它根據(jù)XML文件中的定義裝入 bean,如清單1所示。清單 1. XmlBeanFactoryBeanFactory factory = new XMLBeanFactory(new FileInputSteam(mybean.xml);在XML文件中定義的Bean是被消極加載的,這意味在需要bean 之前,bean本身不會被初始化。要從BeanFactory檢索bean,只需 調(diào)用getBean()方法,傳入將要檢索的bean的名稱即可,如清單2 所示。清單 2. getBean()M
23、yBean mybean = (MyBean) factory,getBean(mybean);每個(gè)bean的定義都可以是POJO (用類名和JavaBean初始化屬 性定義)或FactoryBean。FactoryBean接口為使用Spring框架構(gòu) 建的應(yīng)用程序添加了一個(gè)間接的級別。理解控制反轉(zhuǎn)最簡單的方式就是看它的實(shí)際應(yīng)用。在對由三部分組 成的Spring系列 的第1部分進(jìn)行總結(jié)時(shí),我使用了一個(gè)示例,演示 了如何通過Spring IOC容器注入應(yīng)用程序的依賴關(guān)系(而不是將它們 構(gòu)建進(jìn)來)。我用開啟在線信用帳戶的用例作為起點(diǎn)。對于該實(shí)現(xiàn),開啟信用帳 戶要求用戶與以下月艮務(wù)進(jìn)行交互:信用級別
24、評定月艮務(wù),查詢用戶的信用歷史信息。遠(yuǎn)程信息鏈接服務(wù),插入客戶信息,將客戶信息與信用卡和銀 行信息連接起來,以進(jìn)行自動借記(如果需要的話)。電子郵件服務(wù),向用戶發(fā)送有關(guān)信用卡狀態(tài)的電子郵件。三個(gè)接口對于這個(gè)示例,我假設(shè)服務(wù)已經(jīng)存在,理想的情況是用松散耦合的 方式把它們集成在一起。以下清單顯示了三個(gè)服務(wù)的應(yīng)用程序接口。清單 3. CreditRatingInterfacepublic interface CreditRatingInterface public boolean getUserCreditHistoryInformation(ICustomer iCustomer);清單3所示的信
25、用級別評定接口提供了信用歷史信息。它需要一 個(gè)包含客戶信息的Customer對象。該接口的實(shí)現(xiàn)是由CreditRating 類提供的。清單 4. CreditLinkingInterfacepublic interface CreditLinkingInterface (public String getUrl();public void setUrl(String url);public void linkCreditBankAccount() throws Exception ;信用鏈接接口將信用歷史信息與銀行信息(如果需要的話)連接在 一起,并插入用戶的信用卡信息。信用鏈接接口是一個(gè)遠(yuǎn)程
26、服務(wù),它的 查詢是通過getUrl()方法進(jìn)行的URL由Spring框架的bean配置 機(jī)制設(shè)置,我稍后會討論它。該接口的實(shí)現(xiàn)是由CreditLinking類提 供的。清單 5. EmailInterfacepublic interface EmailInterface (public void sendEmail(ICustomer iCustomer);public String getFromEmail();public void setFromEmail(String fromEmail);public String getPassword();public void setPassw
27、ord(String password);public String getSmtpHost();public void setSmtpHost(String smtpHost);public String getUserId();public void setUserId(String userId);Hibernate 方面:A不會涉及到2級緩存以及hql1. Configuration讀取 hibernate.cfg.xml.并把.hbm.xml 文件交給 HbmBinder 做第一次處理,HbmBinder 根 據(jù).hbm.xml 解析出 PersistentClass, Collec
28、tion,然后在創(chuàng)建 SessionFactory 的時(shí)候,會對 Collection做第2次處理塞入關(guān)聯(lián)PersistentClass根據(jù)hbm.xml產(chǎn)生的描述要持久化的類的信息的類.主要的實(shí)例變量包括List propertiesProperty對象里的有個(gè)Value屬性value,通過value來描述該property和數(shù)據(jù)庫里的哪些列對應(yīng)以及獲得該property對應(yīng)的typeValue主要分為SimpleValue,Collection,Component,ToOneSimpleValue主要包括Table和Columns屬性,用于描述簡單屬性或單主鍵Collection主要屬性包
29、括collectionTable 表示 Collection 里面 element 對象所對應(yīng)的 Tablekey表示CollectionTable里的哪幾列和Collection owner所對應(yīng)的表的主鍵做關(guān)聯(lián) element,描述了主表(referencingTable)從表的 EnityName,以及從表對應(yīng)的 PersistentClass Component可以用來描述多主鍵,通過屬性properties來表示ToOne包括被引用的屬性名,被引用的實(shí)體名,columns,引用的屬性名不能和 columns 同時(shí)設(shè)置),用于 OneToOne,ManyToOneSessionFact
30、ory在創(chuàng)建 SessionFactory 的時(shí)候,會根據(jù) Configuration 里 Classes 和 Collections,創(chuàng)建 EntityPersister 和 CollectionPersister.SessionFactory 會緩存這些 persisters.EnityPersistenter 的 key 是 EntityName, CollectionPersister 的 key 是 entityName+propertyNameEntityPersister分為SingleTableEntityPersister(一個(gè)實(shí)體一個(gè)表/一個(gè)類繼承結(jié)構(gòu)一個(gè)表)通過一個(gè)字段做
31、標(biāo)識JoinedSubclassEntityPersister(每個(gè)子類一個(gè)表)UnionSubclassEntityPersister(每個(gè)具體類一個(gè)表)CollectionPersister封裝對一個(gè)Collection的crud操作.不過做insert,update,delete,recreate的時(shí)候,會判Inverse是否為false.如果為false才會執(zhí)行 相應(yīng)的操作,表示是由Collection維護(hù)關(guān)系.如果Inverse=true,表示關(guān)聯(lián)關(guān)系是由多端來維護(hù)(即直接通過操作Collection里的element 來維護(hù),而不是通過操作Collection來維護(hù))則該Colle
32、ctionPersister不會做任何操作Type主要包括對 SqlTypes 的封裝,以及 CollectionType,EntityType (ManyToOneType,OneToOneType)主 要接口有 nullSafeGet( 從 ResultSet 拼裝出對象),nullSafeSet(給 PreparedStatement setParameter).可以通過Value,getType(獲得Type對于 EntityType,CollectionType就是通過 resolve 方法從ResultSet中拼裝出對象EntityType的nullSafeSet,就是獲取One端
33、對象的主鍵所對應(yīng) 的 Type 進(jìn)行 nullSafeSetCollectionType沒有實(shí)現(xiàn)nullSafeSet,通過保存時(shí)的Cascade 或者 CollectionPersister將 Collection 的Element 一個(gè)一個(gè)的 set也可以自定義Type實(shí)現(xiàn)UserType接口具體見 HYPERLINK /framework/hibernate/reference-v3_zh-cn/inheritance.html /framework/hibernate/reference-v3_zh-cn/inheritance.html封裝對一個(gè)entity的crud操作,在創(chuàng)建En
34、tityPersister實(shí)例過程中,會產(chǎn)生crud的sql,可以在以后的操作提高效率。不過如果是DynamicInsert, DynamicUpdate則 會根據(jù)對象修改的屬性動態(tài)的生成sqlDAS不支持類繼承的映射,因此只會用到SingleTableEntityPersisterStatefulPersistenceContextStatefulPersistenceContext 和 Sessionlmpl 是一一對應(yīng)的,會緩存通過 Sessionlmpl操作過的對象,包括entity和collection.主要屬性有 EntitiesByKey key=EntityKey, value
35、=entity.(EntityKey=id+EntityPersister+EntityMode entityMode) entityEntries key=entity, value=EntityEntry.EntityEntry用于描述一個(gè)對象的持久化狀態(tài),如DELETED,MANAGED等等CollectionsByKeykey=CollectionKey, value=PersistentCollectionCollectionKey=CollectionPersister+key+EntityMode這 個(gè) Key 是通過 Collection.value.getType.nullS
36、afeGet()得 到的 PersistentCollection 是 hibernate 對于 Collection 的封裝, 主要用于實(shí)現(xiàn)延遲加載collectionEntries key=PersistentCollection,value=CollectionEntryStatefulPersistenceContext的主要用途可以實(shí)現(xiàn)對象之間的關(guān)聯(lián)關(guān)系 的設(shè)置,動態(tài)的更新,以及對緩存的數(shù)據(jù)無需顯示調(diào)用save,update,delete的 方法就可以實(shí)現(xiàn)這些操作,是因?yàn)樵赥mit()的時(shí)候會調(diào)用 session.flush(),會保證內(nèi)存對象狀態(tài)和數(shù)據(jù)庫的一致性Cascade,Ca
37、scadeStyle,CascadingAction在Cascade執(zhí)行級聯(lián)操作的時(shí)候,會通過CascadeStyle.doCascade(CascadingAction)來判斷是否可以執(zhí)行cascade,并且當(dāng)要保存的對象有外鍵 約束的關(guān)聯(lián)對象時(shí)候會通過ForeignKeyDirection來判斷是應(yīng)該在保存該對象 之前要保存關(guān)聯(lián)對象還是在保存該對象之后再保存關(guān)聯(lián)對象Loader,CriteriaQueryTranslator,Criteria,QueryParameters, CriteriaJoinWalker 用于Criteria api對實(shí)體的查詢Criteria是一個(gè)查詢entit
38、y的api??梢栽O(shè)置類似where條件的表達(dá)式,Select字段,。出等等當(dāng)使用 Criteria 查詢時(shí),首先會創(chuàng)建 CriteriaLoader,CriteriaLoader會 通過 CriteriaQueryTranslator 從 Criteria 中得到查詢參數(shù)QueryParameters,通過 CriteriaJoinWalker 把 Criteria 變成 sql,然后 執(zhí)行查詢ActionQueue當(dāng)調(diào)用session對實(shí)體進(jìn)行insert,update,delete的時(shí)候,只是會創(chuàng)建相應(yīng) 的action放入ActionQueue,然后在session.flush()的時(shí)候才會真正操作 數(shù)據(jù)庫ActionQueue的執(zhí)行順序:executeActions( insertions );executeActions( updates );executeActions( collectionRemovals ); executeActions( collectionUpdates );executeActions( collectionCreations );executeActions( de letions );Tuplizer用于根據(jù)entityn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 混凝土底板施工方案
- 連續(xù)剛構(gòu)施工方案
- 寧夏攔水壩施工方案
- TSICA 007-2024 數(shù)字旋變轉(zhuǎn)換器芯片的技術(shù)規(guī)范
- TSHCH 01-2024 SLAM測量技術(shù)標(biāo)準(zhǔn)
- 二零二五年度幼兒園藝術(shù)教育合作項(xiàng)目協(xié)議
- 2025年度茶葉加工廠租賃及茶藝培訓(xùn)服務(wù)合同
- 2025年度跨境電商合伙人公司運(yùn)營合作協(xié)議書
- 二零二五年度酒店客房餐飲服務(wù)滿意度調(diào)查合同
- 二零二五年度布展演出項(xiàng)目安全風(fēng)險(xiǎn)評估及整改合同
- 人教版八年級數(shù)學(xué)上冊教案全冊
- 【獨(dú)立儲能】山西省獨(dú)立儲能政策及收益分析-中國能建
- 2024內(nèi)蒙古中考數(shù)學(xué)二輪專題復(fù)習(xí) 二次函數(shù)與幾何綜合題 類型二 面積問題(課件)
- 美團(tuán)眾包新的騎手協(xié)議來了
- 山東管理學(xué)院聲樂題庫復(fù)習(xí)題
- DL-T5796-2019水電工程邊坡安全監(jiān)測技術(shù)規(guī)范
- 高等數(shù)學(xué)教案第四章不定積分
- 2024年高考時(shí)事政治考試題庫(134題)
- DZ∕T 0201-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 鎢、錫、汞、銻(正式版)
- 安全生產(chǎn)責(zé)任制考試試卷及答案
- 擠壓模具拋光培訓(xùn)課件
評論
0/150
提交評論