database - 实现审计追踪——Spring AOP vs.Hibernate Interceptor vs DB Trigger

标签 database hibernate audit spring-aop

我发现了几个关于此的讨论线程 - 但没有任何东西可以在一个线程下比较所有三种机制。

所以这是我的问题......

我需要审核数据库更改 - 插入\更新\删除到业务对象。

我可以想到三种方法来做到这一点

1) 数据库触发器

2) hibernate 拦截器

3) Spring AOP

(这个问题特定于 Spring\Hibernate\RDBMS - 我想这对 java\c# 或 hibernate\nhibernate 是中性的 - 但如果你的答案依赖于 C++ 或 Java 或特定的 hibernate 实现 - 请说明)

选择其中一种策略的优缺点是什么?

我不要求实现细节。-这是设计讨论。

我希望我们可以将其作为社区 wiki 的一部分

最佳答案

我只能说Triggers和NHibernate,因为我对tSpring AOP了解不够。

一如既往,这取决于对您来说最重要的事情。

数据库触发器

  • 速度很快
  • 总是被调用,甚至是从原生 SQL、脚本、外部应用程序调用。
  • 在NH 不知道的数据库中写入数据。它将在当前 session 中丢失。 (这可能会导致意想不到的结果)
  • 通常对您的 session 一无所知(例如:登录名)。

NHibernate 拦截器/事件

  • 不是特定于 DBMS 的。
  • 允许您轻松访问您的业务信息,例如用户 session 、客户端机器名称、某些计算或解释、本地化等。
  • 允许您进行声明性配置,例如实体的属性,它定义实体是否需要记录以及如何记录。
  • 允许您关闭日志记录,这对于升级、导入、非用户触发的特殊操作可能很重要。
  • 允许您从实体角度查看业务模型。您可能更接近用户的观点。

关于database - 实现审计追踪——Spring AOP vs.Hibernate Interceptor vs DB Trigger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769084/

相关文章:

mysql - 如何使用jsf编辑数据库中的一些数据

mysql - 如何将表格转换为列表

java - "Found: smallint, expected: integer"Hibernate 对 informix 数据库的验证短暂失败

windows - 是否有一个 API 可以远程读取 Windows 机器的审计配置?

ruby - 如何提高 Datamapper 中 SQLite3 的性能?

php - 在 plesk api 中,如果我不知道数据库 ID,如何将用户添加到数据库

php - 使用 PHP-MySQL 插入主/详细记录的最佳方法是什么

java - 设置 CriteriaBuilder

sql - 通用数据库设计——我可以引用其他表中的字段名称吗

Azure AD B2C 审核 API