1

我正在使用 jpa 和休眠,我正在尝试存储 JPA 管理的每个项目的创建/更新/删除时间。

我需要像 Hibernate Envers 这样的东西,但只存储最后一次,而不是所有修订,我想将该数据存储在单独的表中(因为这些数据不是项目本身的一部分,而是属于需要的可选同步过程知道每个项目的最后修改时间)。

现在我可以使用 jpa @EntityListeners 捕获所有事件,但现在我不知道如何将这些信息保存到数据库表中。我不想定义 item_history 表实体,而是像 envers 那样在运行时生成和访问它们。

那可能吗 ?

4

1 回答 1

1

您可以使用 Hibernate 拦截器来捕获对实体的 DML 操作,并将所需的数据存储在单独的表中。

检查这个例子

如果您不想映射新实体来存储历史记录,请执行本机 SQL 来复制数据或调用 PL/SQL 过程。一个例子:

Table table = Entity.class.getAnnotation(Table.class);
String tableName = table.name();
Query query = session.createQuery("insert into " + table + "_HIST" +
            "SELECT * FROM " + table ;
int result = query.executeUpdate();
于 2012-09-03T17:17:00.967 回答