更新時間:2023-01-03 16:07:41 來源:動力節(jié)點(diǎn) 瀏覽1199次
1.Hibernate 是如何工作的?
2、get()和 load()的區(qū)別?
3、說一下 Hibernate 的緩存機(jī)制?
一級緩存:也叫 Session 緩存,只在 Session 作用范圍內(nèi)有效,不需要用戶干涉,由 Hibernate 自身維護(hù),可以通過:evict(object)清除 object 的緩存;clear()清除一級緩存中的所有緩存;flush()刷出緩存;
二級緩存:應(yīng)用級別的緩存,在所有 Session 中都有效,支持配置第三方的緩存,如:EhCache。
4、Hibernate 對象有哪些狀態(tài)?
臨時/瞬時狀態(tài):直接 new 出來的對象,該對象還沒被持久化(沒保存在數(shù)據(jù)庫中),不受 Session 管理。
持久化狀態(tài):當(dāng)調(diào)用 Session 的 save/saveOrUpdate/get/load/list 等方法的時候,對象就是持久化狀態(tài)。
游離狀態(tài):Session 關(guān)閉之后對象就是游離狀態(tài)。
5、在 Hibernate 中 getCurrentSession 和 openSession 的區(qū)別是什么?
getCurrentSession 會綁定當(dāng)前線程,而 openSession 則不會。
getCurrentSession 事務(wù)是 Spring 控制的,并且不需要手動關(guān)閉,而 openSession 需要我們自己手動開啟和提交事務(wù)。
6、Hibernate 實(shí)體類必須要有無參構(gòu)造函數(shù)嗎?為什么?
Hibernate 中每個實(shí)體類必須提供一個無參構(gòu)造函數(shù),因為Hibernate 框架要使用反射機(jī)制,通過調(diào)用 ClassnewInstance() 來創(chuàng)建實(shí)體類的實(shí)例,如果沒有無參的構(gòu)造函數(shù)就會拋出異常。
7、什么數(shù)據(jù)不適合存放到第二級緩存?
8、Hibernate延遲加載可分為哪兩種?
延遲屬性加載(集合屬性、非集合屬性)
延遲關(guān)聯(lián)實(shí)體加載(多對一、一對多)
9、什么是延遲加載?
延遲加載機(jī)制是在加載數(shù)據(jù)時不加載全部數(shù)據(jù),而是只加載我們需要的那部分,其余部分在需要使用時才從數(shù)據(jù)庫裝載,以此來減少數(shù)據(jù)量提高系統(tǒng)性能。
例子:
在使用某些Hibernate方法查詢數(shù)據(jù)的時候,Hibernate返回的只是一個空對象(除了id外屬性都為null),并沒有真正的查詢數(shù)據(jù)庫。而是在使用這個對象的時候才會出發(fā)查詢數(shù)據(jù),并將查詢到的數(shù)據(jù)注入到這個空對象中。
以上就是“常被問到的hibernate面試題,一定要搞清楚”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743