我有一个非常奇特的要求,如果在一个特定表中插入,我必须在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.
}
}
);
应该让您走的任何一种。