Spring @PostPersist不';t将审核记录保存到数据库中

Spring @PostPersist不';t将审核记录保存到数据库中,spring,hibernate,orm,openjpa,apache-karaf,Spring,Hibernate,Orm,Openjpa,Apache Karaf,我有一个名为“doAudit”的@PostPersist方法的监听器来审核创建操作。在调试时,我看到这个方法被调用,并且在JAVA端创建了审核记录。但是当我验证数据库时,我没有看到记录 public class AuditListener { @PostPersist public void doAudit(Object object) { AuditDao auditManager = AuditDaoImpl.getInstance(); au

我有一个名为“doAudit”的@PostPersist方法的监听器来审核创建操作。在调试时,我看到这个方法被调用,并且在JAVA端创建了审核记录。但是当我验证数据库时,我没有看到记录

public class AuditListener {
    @PostPersist
    public void doAudit(Object object) {
        AuditDao auditManager = AuditDaoImpl.getInstance();
        auditManager.logEvent("create", object);
    }
}

public interface AuditDao {
    @Transactional(propagation= Propagation.REQUIRED)
    public AuditEntity logEvent(String action, Object object);
}

@Component
public class AuditDaoImpl implements AuditDao {

    private static AuditDaoImpl me;

    public AuditDaoImpl() {
        me = this;
    }

    public static AuditDaoImpl getInstance() {
        return me;
    }

    @Autowired
    private AuditDao dao;

    @Transactional
    @Override
    public AuditEntity logEvent(String action, Object object) {

        AuditEntity act = new AuditEntity();
        act.setAction(action);
        act.setObject(object);

        dao.create(act);
        return act;
    }
}

我正在使用OpenJPA2.0作为我的ORM。部署在卡拉夫集装箱上。我正在使用Postgres SQL作为后端。

添加调试断点并检查当前堆栈跟踪是否包含。如果没有这样的条目,则Spring事务管理没有正确配置,DAO根本不使用事务


JPA允许您在不显式配置事务的情况下运行查询。为了保存数据,事务是必需的。

我将调试并查找TransactionInterceptor。一件有趣的事情是,当我将PostPersist更改为PrePersist时,审计记录保存到DB中,但我希望它在PostPersist上工作。谢谢