hibernate核心及常用技術

來源:互聯網
上載者:User

標籤:type   connect   mvc4   原子操作   ssh   http   app   name   base   

一、hibernate介紹

1、hibernate概述

  hibernate是輕量級Java EE持久層解決方案,管理java類到資料庫表的映射(ORM:對象關係型資料對應),並提供資料查詢擷取的方法。

2、體繫結構

  

  (1)SessionFactory:這是Hibernate的關鍵對象,它是單個資料庫映射關係經過編譯後的記憶體鏡像,它也是安全執行緒的。它是產生Session的工廠,本身要應用到ConnectionProvider,該對象可以在進程和叢集的層級上,為那些事務之間可以重用的資料提供可選的二級緩衝。

      (2)Session:它是應用程式和持久儲存層之間互動操作的一個單線程對象。它也是Hibernate持久化操作的關鍵對象,所有的持久化對象必須在Session的管理下才能夠進行持久化操作。此對象的生存周期很短,其隱藏了JDBC串連,也是Transaction 的工廠。Session對象有一個一級緩衝,現實執行Flush之前,所有的持久化操作的資料都在緩衝中Session對象處。

      (3)持久化對象:系統建立的POJO執行個體一旦與特定Session關聯,並對應資料表的指定記錄,那該對象就處於持久化狀態,這一系列的對象都被稱為持久化對象。程式中對持久化對象的修改,都將自動轉換為持久層的修改。持久化對象完全可以是普通的Java Beans/POJO,唯一的特殊性是它們正與Session關聯著。

      (4)瞬態對象和脫管對象:系統進行new關鍵字進行建立的Java 執行個體,沒有Session 相關聯,此時處於瞬態。瞬態執行個體可能是在被應用程式執行個體化後,尚未進行持久化的對象。如果一個曾今持久化過的執行個體,但因為Session的關閉而轉換為脫管狀態。

      (5)事務(Transaction):代表一次原子操作,它具有資料庫事務的概念。但它通過抽象,將應用程式從底層的具體的JDBC、JTA和CORBA事務中隔離開。在某些情況下,一個Session 之內可能包含多個Transaction對象。雖然事務操作是可選的,但是所有的持久化操作都應該在交易管理下進行,即使是唯讀操作。

      (6)串連提供者(ConnectionProvider):它是產生JDBC的串連的工廠,同時具備串連池的作用。他通過抽象將底層的DataSource和DriverManager隔離開。這個對象無需應用程式直接存取,僅在應用程式需要擴充時使用。

      (7)事務工廠(TransactionFactory):他是產生Transaction對象執行個體的工廠。該對象也無需應用程式的直接存取。

Hibernate的核心:

                 

 

     從中,我們可以看出Hibernate六大核心介面,兩個主要設定檔,以及他們直接的關係。Hibernate的所有內容都在這了。那我們從上到下簡單的認識一下,每個介面進行一句話總結。

  1、Configuration介面:負責配置並啟動Hibernate

  2、SessionFactory介面:負責初始化Hibernate

  3、Session介面:負責持久化對象的CRUD操作

  4、Transaction介面:負責事務

  5、Query介面和Criteria介面:負責執行各種資料庫查詢

  注意:Configuration執行個體是一個啟動期間的對象,一旦SessionFactory建立完成它就被丟棄了。

3、hibernate映射

4、組件屬性對應

5、hibernate關聯映射

  hibernate雙向ManyToMany映射

7、HQL查詢

  hibernate之HQL查詢

8、條件查詢

  hibernate之條件查詢

9、SQL查詢

  hibernate之SQL查詢

10、交易管理

  springmvc+hibernate4交易管理配置

11、緩衝機制

  緩衝的目的減少代碼與資料庫的互動,從而提高資料庫的訪問效能。hibernate預設總是啟用的session層級的一級緩衝(每個session專屬的,當Session 關閉後這個 CACHE 也就沒有了),不需要開發人員關心,總是有效。sessionFactory的二級緩衝是全域性的,被應用的所有session共用,預設情況是關閉的,需由程式顯式開啟。一旦應用中開啟二級緩衝,session在抓取資料時將先尋找一級緩衝,再尋找二級緩衝,只有在二者中都沒有要抓取的資料時,才會尋找底層資料庫。

  緩衝的 key 是根據 hql 產生的 sql ,再加上參數,分頁等資訊

  緩衝介紹

1、持久化對象的狀態

  瞬態、持久化、脫管

二、問題

1、sessionFactory注入失敗

報錯資訊:No qualifying bean of type ‘org.hibernate.SessionFactory‘ available

解決:在web.xml中添加

<listener>    <listener-class>      org.springframework.web.context.ContextLoaderListener    </listener-class>  </listener>

2、sessionFactory.getCurrentSession()時無法獲得同步事務

報錯資訊:[Request processing failed; nested exception is org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread]

解決:在web.xml中添加

  <filter>    <filter-name>SpringOpenSessionInViewFilter</filter-name>    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>SpringOpenSessionInViewFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

SpringMVC4+Hibernate4運行報錯Could not obtain transaction-synchronized Session for current thread

【SSH進階之路】Hibernate基本原理(一)

hibernate核心及常用技術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.