Java JPA:将上次更新时间存储在单独的表中

Java JPA:将上次更新时间存储在单独的表中,java,hibernate,jpa,hibernate-envers,Java,Hibernate,Jpa,Hibernate Envers,我正在使用jpa和hibernate,并试图存储jpa管理的每个项目的创建/更新/删除时间 我需要类似Hibernate Envers的东西,但只存储最后一次,而不是所有修订,我希望将该数据存储在单独的表中(因为该数据不是项目本身的一部分,而是属于可选的同步过程,需要知道每个项目的最后修改时间) 现在我可以使用jpa@EntityListeners捕获所有事件,但现在我不知道如何将这些信息持久化到数据库表中。 我不想定义item_history表实体,而是像envers那样在运行时生成并访问它们

我正在使用jpa和hibernate,并试图存储jpa管理的每个项目的创建/更新/删除时间

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

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


这可能吗?

您可以使用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();

您可以使用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();

正如我所说:我可以使用jpa@EntityListeners捕获所有事件。问题是:我不想像我说的那样定义一个item_history表entitys:我可以使用jpa@EntityListeners捕获所有事件。问题是:是否不定义项\历史记录表实体