Hibernate通過(guò)Lifecycle、Validatable接口制定了實(shí)體對(duì)象CRUD過(guò)程中的回調(diào)方式。
Lifecycle接口中的onSave、onUpdate、onDelete方法,如果返回true則意味著需要中止執(zhí)行相應(yīng)的操作過(guò)程。如果代碼運(yùn)行期間拋出了CallbackException,對(duì)應(yīng)的操作也會(huì)被中止。注意,不要試圖在這些方法中調(diào)用Session進(jìn)行持久化操作,這些方法中Session無(wú)法正常使用。
Validatable.validate方法將在實(shí)體被持久化之前得到調(diào)用以對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。此方法在實(shí)體對(duì)象的生命周期內(nèi)可能被數(shù)次調(diào)用,因此,此方法僅用于數(shù)據(jù)本身的邏輯校驗(yàn),而不要試圖在此實(shí)現(xiàn)業(yè)務(wù)邏輯的驗(yàn)證。
Hibernate還引入了Interceptor,為持久化事件的捕獲和處理提供了一個(gè)非侵略性的實(shí)現(xiàn)。Interceptor接口定義了Hibernate中的通用攔截機(jī)制。Session創(chuàng)建時(shí)即可指定加載相應(yīng)的Interceptor,之后,此Session的持久化操作動(dòng)作都將首先經(jīng)由此攔截器捕獲處理。簡(jiǎn)單的加載范例如下:



需要注意的是,與Lifecycle相同,Interceptor的方法中不可通過(guò)Session實(shí)例進(jìn)行持久化操作。