国产在线精品一级A片-国产另类欧美-国产精品va在线观看一-我要找美国一级片黄色|www.zheinei.com

hibernate面試題及答案

時間:2022-11-23 02:15:04 面試技巧 我要投稿
  • 相關推薦

hibernate面試題及答案

  求職應聘,面試技巧的準備是必不可少的環節。快來學習hibernate面試題及答案啦,增加面試通過率,陽光網小編帶你一起學習。

hibernate面試題及答案

  hibernate面試題及答案(一)

  一. Hibernate工作使用步驟?

  1. 讀取并解析配置文件

  2. 讀取并解析映射信息,創建SessionFactory

  3. 打開Sesssion

  4. 創建事務Transation

  5. 持久化操作

  6. 提交事務

  7. 關閉Session

  8. 關閉SesstionFactory

  二.Hibernate的查詢方式有幾種?

  (1)導航對象圖檢索方式。根據已經加載的對象,導航到其他對象。

  (2)OID查詢方式。根據對象的OID來查詢對象。Session的get()和load()方法。

  (3)HQL查詢方式。HQL是面向對象的查詢語言,session的find()方法用于執行HQL查詢語句。可以利用Query接口。

  Query query = session.createQuery(“from Customer as c where c.name =: customerName”);

  query.setString(“customerName”,”張三”); List resultList = query.list();

  (4)QBC查詢方式。這種API封裝了基于字符串形式的查詢語句。

  Criteria criteria = session.createCriteria(User.class); Criterion criterion1 = Expession.like(“name”,”T%”);

  Criterion criterion2 = Expession.eq(age,new Integer(30));

  criteria = criteria.add(criterion1);

  criteria = criteria.add(criterion2);

  List resultList = criteria.list();

  這種查詢方式使用的較少,主要是在查詢中需要用戶輸入一系列的查詢條件,如果采用HQL查詢代碼會比較煩。

  (5)本地SQL查詢

  三.Hibernate的檢索策略有幾種?

  立即檢索----立即加載檢索方法指定的對象。

  延遲檢索----延遲加載檢索方法指定的對象,只有當初次獲取其屬性或調用其方法時才加載。

  如果將<class>元素的lazy熟悉設置為true,那么Load()方法是延遲加載。

  而不管lazy是true或false,get()和find()方法永遠是立即檢索。

  session.load()和session.get()的區別

  Session.load/get方法均可以根據指定的實體類和id從數據庫讀取記錄,并返回與之對應的實體對象。其區別在于:

  如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個

  ObjectNotFoundException。執行load方法并不會真正去查詢DB,只有當首次訪問實體對象屬性時才會去DB中真正查詢。(即懶加載)

  Load方法返回實體的代理類實例,而get方法永遠直接返回實體類。

  load支持延遲加載,get不支持延遲加載。

  load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。

  四.Hibernate的緩存

  Hibernate有2級緩存。

  第一級緩存是session緩存,其是事務范圍內的緩存,第一級緩存也是必需要的,無法清除。在第一級緩存中,每個持久化的實例對象都有一個OID.

  第二級緩存是SessionFactory的外置緩存,是一個可以插拔的緩存插件,由SessionFactory負責管理。第二級緩存是進程范圍內的或者群集范圍內的緩存。

  hibernate面試題及答案(二)

  一.Hibernate中對象的狀態有幾種?

  3種狀態,瞬時狀態,持久化狀態,游離狀態。

  (1) 瞬時狀態----剛用new語句創建,尚未持久化,沒有被session所關聯,DB中也沒有對

  象的記錄。

  (2) 持久化狀態----跟session關聯,跟數據庫中的相關記錄對應。

  (3) 游離狀態-----由持久化對象轉變而來,不再和session關聯,數據庫中有可能存在與

  之對應的記錄。

  二.Hibernate中關于繼承關系的映射方式

  (1)每個類分層結構一張表

  優點:簡單,只需要一張表,查詢效率高。

  缺點:需要在表中引入額外區分各個子類的字段,不能為所有的子類成員屬性對應的字段定義Not null約束。

  適用范圍:查詢性能要求高,子類屬性不是很多時。

  (2)每個子類一張表,每張表中僅僅包含在當前類中定義的屬性,不包含父類或子類的成員屬性。

  優點:支持多態查詢和關聯查詢,符合關系數據模型的設計規則。 缺點:查詢效率不是很高,需要通過表的內連接或左外連接進行查詢。 適用范圍:子類屬性非常多,需要對子類某些屬性對應的字段加Not null約束,且對性能要求不是很高時。

  (3)每個具體類一張表,每張表中包含在當前類及其父類中的所有成員屬性對應的字段。

  優點:可以對子類的成員屬性定義Not null約束。 缺點:不符合關系數據模型的設計規則,而且每個表中都存在基類的多余字段。 適用范圍:一般不使用。

  三.數據庫事務隔離級別

  數據庫系統提供了四種事務隔離級別供用戶選擇。不同的隔離級別采用不同的鎖類型來實現,在四種隔離級別中,Serializable的隔離級別最高,Read Uncommited的隔離級別最低。大多數據庫默認的隔離級別為Read Commited,如SqlServer,當然也有少部分數據庫默認的隔離級別為Repeatable Read ,如Mysql

   Read Uncommited:讀未提交數據(會出現臟讀,不可重復讀和幻讀)。

   Read Commited:讀已提交數據(會出現不可重復讀和幻讀)

   Repeatable Read:可重復讀(會出現幻讀)

   Serializable:串行化

  hibernate面試題及答案(三)

  1. 請說出Hibernate中持久化對象的生命周期以及各種狀態直接的區別,并描述相互之間是如何轉換的。

  Hibernate中持久化對象的生命周期有臨時態、持久態和游離態三種。

  處于臨時態的對象主鍵值為空,并且未與session關聯,數據未保存到數據庫中

  處于持久態的對象與session關聯起來,持久化后對象中的數據被保存到數據庫中,并且主鍵值按照.hbm.xml文件中配置的生成方式生成相應的值

  處于游離態的對象脫離了session的管理,是持久化后的一種狀態,主鍵值按照.hbm.xml文件中配置的生成方式生成相應的值 當new一個新的對象時,該對象處于臨時態

  當該對象被當作session的參數使用的時候,該對象處于持久態

  事務提交,session關閉后,該對象處于游離態

  2.hibernate與數據庫連接的實現?并解釋了一下,例如文件是通過流來實現的!hibernate與數據庫連接是通過什么實現的? Hibernate與數據庫的連接是通過JDBC實現的

  3.spring和hibernate的事務管理方式有什么不同? hibernate的事務管理方式僅僅就是托管給JDBC(如果用JTA那么就是JTA),而JDBC的一切行為包括事務是基于一個connection的,那么hibernate委托給JDBC的事務也就是基于一個session。JTA與JDBC事務不同在于可以跨連接。

  spring也是調用hibernate中事務管理的API。hibernate的事務管理,一般是編程性的。而委托給spring之后,可以使用聲明式的,也就是可以在XML之中配置哪些需要進行事務管理,哪些不需要

  4.用hibernate的session時要注意幾點

  1.在更新數據時,要用open()

  2.使用完之后,要close(),這樣連接池會回收該連接。

  5.說說在hibernate中使用Integer做映射和使用int做映射之間有什么差別

  使用int做映射,hibernate會自動把int類型轉換為Integer類型,以便統一以對象方式處理數據。使用Integer就無須轉換。 在從數據庫中取數據的時候,如果是用Integer做的映射,則要求PO對象中對應的類型也必須為Integer類型,使用的時候需要轉換為int。如果是int型,則無須轉換。

  6.一個網站應用,請設計一個持久化類User,他可能有多張會員卡號、需要多個email地址(數量不定)作為其身份驗證的方式

  設計三個類。User類、會員卡類和email類。User類與會員卡類和email類之間是一對多的關系

  7.請簡單評價該設計的優劣:身份證號碼作為一個person表的主鍵

  一個表的主鍵值設計最好不要采用具有業務含義的字段。理由有二:

  1.具有業務含義的字段的長度不固定

  2.具有業務含義的字段的取值范圍不定。可能是純數字,也可能是純字符,或者是數字和字符的混合情況。

  上述兩個方面一但發生變動將不利于業務層的處理。

【hibernate面試題及答案】相關文章:

經典面試題及答案04-04

面試題及答案04-04

小升初面試題及答案12-09

經典的面試題及答案分析12-09

sql面試題及答案04-03

php面試題及答案04-02

android面試題及答案04-04

邏輯面試題及答案12-09

護士面試題及答案11-26