我将实现一个功能,在Hibernate删除后更新表中的id。但我希望得到一些关于哪种方法更好的反馈。另外我正在更新值的表,Hibernate不知道它,所以我必须做一个直接的jdbc更新 - 这是可能的。
答案 0 :(得分:8)
就使用监听器/拦截器而言,我会选择监听器 - 在可以收听的事件方面更灵活。拦截器的主要目的是检查/改变对象属性先前到某个事件(例如删除);而侦听器可以配置为收听“PostDelete”事件或many others。
但是,如果没有映射表,你为什么还需要?您可以在调用delete()之后直接在代码中更新它(或者如果涉及外键,则在调用flush()之后)。
您也可以在触发器中执行此操作(可能;当然,取决于数据库中是否有必要的信息)。
答案 1 :(得分:2)
似乎很多人更喜欢听众 - 他们提供更广泛的事件清单,而且更灵活,但是拦截器提供的东西和听众都没有。
例如,如果要在将实体保存到数据库之前修改实体,则应使用Interceptor。
答案 2 :(得分:1)
据我所知,拦截器是hibernate团队的旧实现,而侦听器是新的灵活版拦截器。 Imho它更容易使用hibernate监听器作为拦截器。