更新時間:2023-01-03 16:07:41 來源:動力節點 瀏覽1077次
1.Hibernate 是如何工作的?
2、get()和 load()的區別?
3、說一下 Hibernate 的緩存機制?
一級緩存:也叫 Session 緩存,只在 Session 作用范圍內有效,不需要用戶干涉,由 Hibernate 自身維護,可以通過:evict(object)清除 object 的緩存;clear()清除一級緩存中的所有緩存;flush()刷出緩存;
二級緩存:應用級別的緩存,在所有 Session 中都有效,支持配置第三方的緩存,如:EhCache。
4、Hibernate 對象有哪些狀態?
臨時/瞬時狀態:直接 new 出來的對象,該對象還沒被持久化(沒保存在數據庫中),不受 Session 管理。
持久化狀態:當調用 Session 的 save/saveOrUpdate/get/load/list 等方法的時候,對象就是持久化狀態。
游離狀態:Session 關閉之后對象就是游離狀態。
5、在 Hibernate 中 getCurrentSession 和 openSession 的區別是什么?
getCurrentSession 會綁定當前線程,而 openSession 則不會。
getCurrentSession 事務是 Spring 控制的,并且不需要手動關閉,而 openSession 需要我們自己手動開啟和提交事務。
6、Hibernate 實體類必須要有無參構造函數嗎?為什么?
Hibernate 中每個實體類必須提供一個無參構造函數,因為Hibernate 框架要使用反射機制,通過調用 ClassnewInstance() 來創建實體類的實例,如果沒有無參的構造函數就會拋出異常。
7、什么數據不適合存放到第二級緩存?
8、Hibernate延遲加載可分為哪兩種?
延遲屬性加載(集合屬性、非集合屬性)
延遲關聯實體加載(多對一、一對多)
9、什么是延遲加載?
延遲加載機制是在加載數據時不加載全部數據,而是只加載我們需要的那部分,其余部分在需要使用時才從數據庫裝載,以此來減少數據量提高系統性能。
例子:
在使用某些Hibernate方法查詢數據的時候,Hibernate返回的只是一個空對象(除了id外屬性都為null),并沒有真正的查詢數據庫。而是在使用這個對象的時候才會出發查詢數據,并將查詢到的數據注入到這個空對象中。
以上就是“常被問到的hibernate面試題,一定要搞清楚”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習