@PostPersist不会将审核记录保存到数据库

时间:2015-01-14 20:14:34

标签: spring hibernate orm openjpa apache-karaf

我有一个名为" 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;
    }
}

我正在使用Open JPA 2.0作为我的ORM。部署在karaf容器上。我使用Postgres SQL作为我的后端。

1 个答案:

答案 0 :(得分:0)

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

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