条件休眠拦截器

时间:2018-08-21 20:25:13

标签: java spring hibernate interceptor

我有一个休眠Interceptor,它可以持久保存实体的属性更改并可以正常工作。我希望更新其当前逻辑,并且仅在从特定方法中触发它时才进行拦截,而不仅仅是在Hibernate将其视为“肮脏”时。

我正在寻求实现以下等同功能:

@Override
public boolean onFlushDirty(Object entity, Serializableid, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types){
   String callingMethod = // determined somehow... 
   if(callingMethod == MyService.updatePerson) {
      // Only persist changes when calling method is updatePerson
   }
   return false
}

我到处都围绕SO和Web进行搜索,但是我找不到关于该主题的任何内容。

我已经研究过使用AOP控制这种行为,但是拦截器会盲目地发射

有人知道能够根据调用方法触发拦截器吗?

1 个答案:

答案 0 :(得分:0)

我最终创建了一个Abstract类和Interface以支持设置所需的'isEditable'方法。

然后,我编写了一个自定义批注,在AspectJ中使用该批注来捕获所需的所有执行代码。在切入点中,我更新了实体,并设置了“ isEditable”方法。

现在,当我的拦截器被触发时,我会进行快速检查以查看该实体是否可编辑,否则,我不会将更改保存到历史表中。