上一篇文章我談到了LifeCycle接口和Interceptor接口沒法百分比命中update事件,而我經過引用一直標誌位的形式監聽到了update的事件,在我尚未享受好成功帶來的喜悅的時候,新的問題就又來找我了。 對象
事情是這樣的:對象主題的更新和集合更新是經過不一樣的策略完成的,也就是說我將須要update的entity主體所包含的一對多的集合也完成數據信息的merge,可是因爲Update事件機制的緣由致使了並無正常的激活這個數據信息。 遞歸
一直以來,在思考這個問題的時候,我總把但願投入到一個問題上,就是經過preFlush事件,來控制entity的flush。而flush事件是能監聽到保存事件。有時候,解決問題不能想固然,經過一步一步的跟蹤代碼,我發現之因此集合屬性不能完成merge是由於一個先子元素最後再entity主體的調用過程。因此,儘管interceptor攔截了對象的flush,而因爲以前Update監聽器沒有監聽到集合屬性的更新操做,因此結合中的對象並不能正常完成merge信息。解決問題也正是利用了這一點,因爲不能監聽到主體之外的元素保存,那麼我在監聽到主體entity發生merge操做的時候,遞歸同步它的對象關聯和集合屬性的merge操做。 接口
經過代碼檢測,發現數據信息成功保存了!感受不錯,可是還有一點點的問題。就是不能區分是insert的merge仍是update的merge。這個問題就比較好解決了,經過另外的一個標誌位來標誌,是否爲新建,若是是新建,則我不作遞歸數據同步! 事件
------------------------------------------------------------------------- 同步
對於這個問題的解決,不得不說的是:我對Hibernate的機制瞭解尚淺,對它不少微妙的地方瞭解不清楚。但願你們能給予更多的支持與幫助!謝謝! it