呼叫方法事后交易提交



我有一个非常奇特的要求,如果在一个特定表中插入,我必须在2个表(审核表)中插入记录。这里我不是在谈论听众中谈论@preinsert,因为听众总是在同一交易中调用。我知道可以通过简单地调用"保存"方法在第一个保存成功后手动完成。但是我想知道,还有其他方法可以尝试使用侦听器,包括JPA/eClipSelink/string-data,以便应用程序的未来开发人员不会被迫手动插入审计表中的数据。

基本上,我正在寻找@postCommit的功能类型。请帮我。

我相信您最终 do 希望回调在当前交易的边界内运行,您只希望它在之后运行Hibernate已经完成了它的工作,就像Hibernate Envers的工作一样。

要执行此操作,您基本上需要注册事件操作队列回调如下:

session.getActionQueue().registerProcess(
  new BeforeTransactionCompletionProcess() {
    @Override
    public void doBeforeTransactionCompletion(SessionImplementor session) {
      // do whatever you want with the session here.
    }
  }
);

如果您最终必须运行代码外部交易,则可以做类似的事情:

session.getActionQueue().registerProcess(
  new AfterTransactionCompletionProcess() {
    @Override
    public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) {
      // do whatever you want with the session here.
    }
  }
);

应该让您走的任何一种。

最新更新