我有一个名为" 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作为我的后端。
答案 0 :(得分:0)
添加调试断点并检查当前堆栈跟踪是否包含TransactionInterceptor。如果没有这样的条目,则Spring事务管理未正确配置,并且您的DAO根本不使用事务。
JPA允许您在不显式配置事务的情况下运行查询。为了保存数据,交易是强制性的。