上一篇文章我谈到了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