Spring @PostPersist不';t将审核记录保存到数据库中
我有一个名为“doAudit”的@PostPersist方法的监听器来审核创建操作。在调试时,我看到这个方法被调用,并且在JAVA端创建了审核记录。但是当我验证数据库时,我没有看到记录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
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上工作。谢谢