hibernate面試題

時間:2024-10-18 04:14:51 學(xué)人智庫 我要投稿
  • 相關(guān)推薦

hibernate面試題

  1. 請解釋Hibernate3.2主鍵的生成方式中,native和identity方式的區(qū)別。

hibernate面試題

  Native主鍵生成方式會根據(jù)不同的底層數(shù)據(jù)庫自動選擇Identity、Sequence、Hilo主鍵生成方式

  特點:根據(jù)不同的底層數(shù)據(jù)庫采用不同的主鍵生成方式。由于Hibernate會根據(jù)底層數(shù)據(jù)庫采用不同的映射方式,因此便于程序移植,項目中如果用到多個數(shù)據(jù)庫時,可以使用這種方式。

  Identity根據(jù)底層數(shù)據(jù)庫,來支持自動增長,不同的數(shù)據(jù)庫用不同的主鍵增長方式。

  特點:與底層數(shù)據(jù)庫有關(guān),要求數(shù)據(jù)庫支持Identity,如

  MySQl中是auto_increment,

  SQL Server 中是Identity,支持的數(shù)據(jù)庫有MySql、SQL Server、DB2、Sybase和HypersonicSQL。

  Identity無需Hibernate和用戶的干涉,使用較為方便,但不便于在不同的數(shù)據(jù)庫之間移植程序。

  2. 請解釋為什么SessionFactory一般以單利方式使用。

  SessionFactory是一個大型對象,而且線程安全。在一個程序中只需要一個

  3. 請解釋說明hibernate配置文件中dialect屬性的確切含義。

  數(shù)據(jù)庫方言:多種數(shù)據(jù)庫擁有不同的語言語法,通過設(shè)置dialect指定所用的數(shù)據(jù)庫,并生成對應(yīng)語法和語言的sql語句。

  4,請解釋說明Hibernate控制下的POJO<對象>會呈現(xiàn)三種狀態(tài),分別是transient、persistenet和detached,請解釋這三種狀態(tài)。

  暫態(tài):數(shù)據(jù)庫中沒數(shù)據(jù)。跟session不相關(guān)。沒存過。

  游離態(tài):在數(shù)據(jù)庫中有記錄,但是在session中沒有。需要手工同步。

  持久態(tài):數(shù)據(jù)庫中有記錄,session中也有這記錄。自動更新

  5. 請解釋Session的load方法和get方法的不同;

  load 在加載的時候會根據(jù)加載策略來加載東西,加載策略默認為延遲加載,即只加載id.,如果需要用其它數(shù)據(jù),必須在session關(guān)閉之前,去加載某一 個屬性。lazy="true" or "false" 如果加載策略是立即加載,那么它在加載時會把數(shù)據(jù)信息全部加載,這個時候即使,關(guān)閉session,因為數(shù)據(jù)已經(jīng)全部加載了,也能取得數(shù)據(jù)

  get 會直接采用立即加載策略加載數(shù)據(jù),不管你配置的是延遲加載還是立即加載

  關(guān)于立即加載和延遲加載 不僅只對自己這張表,將來表與表之間有關(guān)系時,一樣會起作用。

  如果對象不存在 get返回null load拋異常

  6.請解釋cascade屬性和-orphan的區(qū)別。

  : 在執(zhí)行 時進行關(guān)聯(lián)操作。

  all--orphan: 當(dāng)一個節(jié)點在對象圖中成為孤兒節(jié)點時,刪除該節(jié)點。比如在一個一對多的關(guān)系中,Student包含多個book,當(dāng)在對象關(guān)系中刪除一個book時,此book即成為孤兒節(jié)點。

  7.請解釋inverse屬性的作用

  inverse表“是否放棄維護關(guān)聯(lián)關(guān)系”(在Java里兩個對象產(chǎn)生關(guān)聯(lián)時,對數(shù)據(jù)庫表的影響),在one-to-many和many-to-many的集合定義中使用,inverse="true"表示該對象不維護關(guān)聯(lián)關(guān)系;該屬性的值一般在使用有序集合時設(shè)置成false(注意hibernate的缺省值是false)。 one-to-many維護關(guān)聯(lián)關(guān)系就是更新外鍵。many-to-many維護關(guān)聯(lián)關(guān)系就是在中間表增減記錄。

  8.請解釋Hibernate查詢中出現(xiàn)的N+1問題,并提出解決方案。

  Hibernate在檢索與Customer關(guān)聯(lián)的Order對象時,使用了默認的立即檢索策略。這種檢索策略存在兩大不足:

  (1) select語句的數(shù)目太多,需要頻繁的訪問數(shù)據(jù)庫,會影響檢索性能。如果需要查詢n個Customer對象,那么必須執(zhí)行n+1次select查詢語句。這就是經(jīng)典的n+1次select查詢問題。

  (2)在應(yīng)用邏輯只需要訪問Customer對象,而不需要訪問Order對象的場合,加載Order對象完全是多余的操作,這些多余的Order對象白白浪費了許多內(nèi)存空間。

  為了解決以上問題,Hibernate提供了其他兩種檢索策略:延遲檢索策略和迫切左外連接檢索策略。延遲檢索策略能避免多余加載應(yīng)用程序不需要訪問的關(guān)聯(lián)對象,迫切左外連接檢索策略則充分利用了SQL的外連接查詢功能,能夠減少select語句的數(shù)目。

  9.請簡要的描述一下使用Hibernate進行大批量更新的經(jīng)驗;

  直接使用hibernate API 進行批量更新和批量刪除都不推薦,而直接通過JDBC API執(zhí)行相關(guān)的SQl語句或調(diào)用相關(guān)的存儲過程是最佳的方式。

  10,請簡要的描述一下使用Hibernate二級高速緩存的經(jīng)驗

  1.Hibernate3的二級緩存和session級別的緩存一樣都只對實體對象做緩存,不對屬性級別的查詢做緩存;二級緩存的生命周期和sessionFactory的生命周期是一樣的,sessionFactory可以管理二級緩存;

  2.sessionFactory級別的緩存,需要手動配置;所有的session可以共享sessionFactory 級別的緩存;(一般把一些不經(jīng)常變化的實體對象放到sessionFactory級別的緩存中,適合放不經(jīng)常變化的實體對象。)

  3.Hiberante3二級緩存的配置和使用方法如下:

  必須把ehcache.jar包導(dǎo)入,然后到Hibernate3.2的etc文件下把ehcache.xml復(fù)制到工程src目錄下(ehcache.xml里邊的參數(shù)里邊有詳細英文說明);

  說明:ehcache.jar是第三方法的緩存產(chǎn)品,hiberante只是把它做了集成,還有好多第三方hibernate集成的緩存產(chǎn)品,相關(guān)說明請查閱hiberante3開發(fā)手冊;ehcache是不支持分布應(yīng)用的,如果有分布式需求,請換成支持分布式的二級緩存產(chǎn)品,hiberate3開發(fā)手冊都有相頭說明。配置方法都類似);

  4.Hibernate3的二級緩存默認是開起的,也可以指定開起。

  11,Query的list和iterator方法的不同。

  list不會使用緩存,而iterate會先取數(shù)據(jù)庫select id出來,然后一個id一個id的load,如果在緩存里面有,就從緩存取,沒有的話就去數(shù)據(jù)庫load。

  不管是list方法還是iterate方法,第一次查詢的時候,它們的查詢方式很它們平時的方式是一樣的,list執(zhí)行一條sql,iterate執(zhí)行1+N條,多出來的行為是它們填充了緩存

  查詢緩存需要打開相關(guān)類的class緩存。list和iterate方法第一次執(zhí)行的時候,都是既填充查詢緩存又填充class緩存的。

  這里還有一個很容易被忽視的重要問題,即打開查詢緩存以后,即使是list方法也可能遇到1+N的問題!

【hibernate面試題】相關(guān)文章:

投行面試題07-24

軟件測試面試題01-17

中層副職競聘面試題09-05

來看看谷歌的面試題08-17

濟南稼軒中學(xué)小升初面試題07-21

壓力危機類面試題目突破技巧11-09

今年最強的面試題和最牛的答卷09-20

考察個人價值觀的另類面試題02-21

人力資源行業(yè)常見面試題匯總02-03

面試題:給我們一個錄取你的理由?11-16