JPA:将最后更新时间存储在单独的表中

时间:2012-09-03 15:33:03

标签: java hibernate jpa hibernate-envers

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

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

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

可能吗?

1 个答案:

答案 0 :(得分:1)

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

Check this example

如果您不想映射新实体来存储历史记录,请执行本机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();