国产真实乱子伦精品,国产精品100页,美女网站色免费,国产白嫩美女免费观看,欧美精品亚洲,欧美韩国xxx,欧美性猛交xxxxxxxx软件

hibernate面試題

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

hibernate面試題

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

hibernate面試題

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

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

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

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

  MySQl中是auto_increment,

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

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

  2. 請(qǐng)解釋為什么SessionFactory一般以單利方式使用。

  SessionFactory是一個(gè)大型對(duì)象,而且線程安全。在一個(gè)程序中只需要一個(gè)

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

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

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

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

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

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

  5. 請(qǐng)解釋Session的load方法和get方法的不同;

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

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

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

  如果對(duì)象不存在 get返回null load拋異常

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

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

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

  7.請(qǐng)解釋inverse屬性的作用

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

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

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

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

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

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

  9.請(qǐng)簡(jiǎn)要的描述一下使用Hibernate進(jìn)行大批量更新的經(jīng)驗(yàn);

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

  10,請(qǐng)簡(jiǎn)要的描述一下使用Hibernate二級(jí)高速緩存的經(jīng)驗(yàn)

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

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

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

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

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

  4.Hibernate3的二級(jí)緩存默認(rèn)是開起的,也可以指定開起。

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

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

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

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

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

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

投行面試題07-24

軟件測(cè)試面試題01-17

中層副職競(jìng)聘面試題09-05

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

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

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

今年最強(qiáng)的面試題和最牛的答卷09-20

考察個(gè)人價(jià)值觀的另類面試題02-21

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

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