如何用纯JPA实现历史表?

时间:2011-04-22 07:38:13

标签: java jpa history

我需要将一个“entity_name”更改为另一个名为“entity_name_history”的日志表,而不使用任何JPA提供程序(我必须更改不使用任何JPA提供程序的现有项目)。我想知道的是在纯JPA中实现历史。

我一直在研究像@postUpdate这样的持久性事件拦截,但据我所知,我不能在那些回调中使用entitymanager,如果可以请告诉我。

3 个答案:

答案 0 :(得分:1)

最简单,最干净的解决方案是使用数据库触发器来实现历史记录功能。

答案 1 :(得分:1)

关于该主题有很多文献,尽管它通常被称为“实体审计”。 Hibernate提供了一个名为Hibernate Envers的模块,专门为此构建,显然使用了那种JPA触发器。

implementing it using TopLink(现在是EclipseLink)还有一个(好的?)教程。

所以,是的,这是做的方法,但是,不,你不应该自己做。

答案 2 :(得分:0)

我认为它可以使用,只需要小心使用。以下是JPA规范的引用:

  

通常,可移植应用程序不应调用EntityManager或Query操作,   访问其他实体实例,或修改生命周期回调方法中的关系。

作为替代方案,您可以使用不同的实体管理器或使用将存在于同一事务中的纯JDBC数据源连接。特别是,如果您不需要在同一JPA会话中对历史对象进行任何操作。