2017-03-02 42 views
0

我有一个非常奇怪的要求,我必须在2个表(审计表)插入记录,如果插入一个特定的表成功。这里我不是在听者中谈论@PreInsert,因为听众总是在同一个交易中被调用。我知道这可以通过在第一次保存成功后简单地调用“save”方法来手动完成。但是我想知道是否有其他方式可以使用Listener,比如JPA/EclipseLink/String-data,这样未来的应用程序开发人员不会被迫手动将数据插入到审计表中。调用方法发布事务提交

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

回答

0

我相信你最终要回调到当前事务的边界内运行,你只是希望它运行后休眠已经做了的事情,就像休眠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. 
    } 
    } 
); 

这应该让你去任何一种方式。

相关问题