java - 管理数据库中的历史记录

标签 java database spring persistence spring-data

我有一个 Web 项目,它使用数据库来存储数据,这些数据用于生成将由远程计算机处理的任务,以更改记录并存储新数据。我的问题是我必须存储每个表上的所有更改,但我不需要所有这些信息。例如,表 A 可以有 5 个字段,但出于历史目的我只需要 2 个字段。另一张表 B 可能有 3 个,我必须添加另一个(例如日期)。另外,我不需要在日常任务生成过程中进行更改,只需更改最近的任务。

维护变更历史记录的最佳方式是什么?有人告诉我,最好有两个表,A (B) 表和另一个名为 A_history (B_history) 的表,其中包含所需的字段。这实际上就是我正在做的事情,使用触发器插入历史表,但我对这种方法感到不舒服。我的项目使用 Spring(Spring-data、Hibernate 和 JPA),如果我更改数据库(当前是 MySQL),我就必须迁移触发器。有没有好的方法来管理历史记录?可以使用 Hibernate/JPA 注释生成表格。

如果我维护两个表方法,我可以向存储库添加一个方法来立即从当前表和历史表中获取行吗?

最佳答案

为此目的,有一个特殊的 Hibernate Envers项目。查看官方文档here 。只需配置它,使用 @Audited 注释来注释必要的属性即可。不需要数据库触发器。

一个陷阱:如果你想为每个删除操作都有一条记录,那么你需要使用 Session.delete(entity) 方式而不是 HQL“delete ...”。

编辑。另请查看 native auditing support spring data jpa。

关于java - 管理数据库中的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16282050/

相关文章:

database - DBMS Oracle 中的约束

java - request.getParameter - 无法读取 &

java - 使用 JSMPP 接收短信有时会停止

java - 缺少 Artifact org.springframework :spring-beans:jar:5. 0.0.M4

Java Spring 存储库删除不起作用 OneToMany 关系

database - 使用 JPA、Hibernate 的 PostgreSQL 继承

java - 关于 Spring 框架实现的建议

java - Spring 和 Hibernate 突然将事务设置为只读

java - 从 Java 中的 ArrayList 中删除

java - "Unresolved compilation problems"来自在 Eclipse Indigo 中运行 MPJ express