调用方法发布事务提交

时间:2017-03-02 17:47:41

标签: java hibernate jpa eclipselink auditing

如果在一个特定表中插入成功,我必须在2个表(审计表)中插入记录,这是一个非常特殊的要求。这里我不是在讨论监听器中的@PreInsert ,因为监听器总是在同一个事务中被调用。我知道可以通过在第一次保存成功后调用“save”方法手动完成。但我想知道有没有其他方法可以尝试使用Listener,如JPA / EclipseLink / String-data,以便应用程序的未来开发人员不会被迫手动在审计表中插入数据。

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

1 个答案:

答案 0 :(得分:0)

我相信你最终希望回调在当前事务的边界内运行,你只希望它在 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.
    }
  }
);

这应该让你走向任何一个方向。