gpt4 book ai didi

spring - @PostPersist 不会将审计记录保存到数据库

转载 作者:行者123 更新时间:2023-12-05 07:57:06 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于spring - @PostPersist 不会将审计记录保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com